Algorithm

[프로그래머스] 완주하지 못한 선수 Java

yerinpark 2023. 6. 20. 19:21

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42576?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 요약

participant(참가자 목록)와 completion(완주자 목록) 배열을 비교하여 완주자 목록에 없는 한 사람만 찾아내면 된다.

 

 

참고 사항

동명이인이 있을 수 있음을 유념한다.

 

 

구현 착안

value는 중복 저장될 수 있지만(e.g. 위의 문제에서 동명이인) key는 중복 저장될 수 없고, 만약 기존에 저장된 key와 동일한 key로 value를 저장하면 기존의 value는 새로운 value로 대치되는 HashMap을 사용한다.

 

 

c.f. HashMap

Map은 key, value로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조이다.

HashMap은 많은 양의 데이터를 검색하는 데 있어서 성능이 뛰어나다.

 

 

hashmap 메서드 중 getOrDefault(), entrySet()을 사용한다.

 

 

구현 순서

[참가자 hashmap에 담기]

1. String[] participant에 있는 참가자를 꺼내 hashmap에 담는다.

 

2. 담을 때, getOrDefault() 메서드를 사용해서 key에는 선수 이름,

map에 선수 이름이 없으면 value에 default 값 0,

map에 선수 이름이 있으면 value에 1을 더해서 넣는다.

그러면 value에는 목록에 있는 같은 이름의 개수만큼 값이 저장된다.

{ [선수 이름]=[map에 선수 이름이 없으면 0, 있으면 1을 더한 값], ...}

e.g. {ana=1, mislav=2, stanko=1}

 

 

[완주자 목록으로 hashmap의 value 갱신하기]

3. 이제 hashmap에 담긴 참가자 목록과 String[] completion에 있는 참가자와 비교한다.

 

4. 완주자 목록의 선수 이름(key)을 put() 했을 때 map에 선수 이름이 있다면, 선수 이름 개수(value)를 1 감소한 값으로 대치한다.

 

5. for문을 다 돌고 나면 완주자(key)는 value가 0일 것이며, 완주하지 못한 선수(key)는 value가 1일 것이다. 

 

 

[완주하지 못한 선수 찾기]

6. hashmap에 있는 선수 이름 개수(value)가 0이 아닌 key를 answer로 return한다.

 

 

 

코드

import java.util.*;

class Solution {
    public static String solution(String[] participant, String[] completion) {
        String answer = "";

        HashMap<String, Integer> map = new HashMap<>();

        for(String player : participant) {
            map.put(player, map.getOrDefault(player, 0) + 1);
        }

        for(String player : completion) {
            map.put(player, map.get(player) - 1);
        }


        for(Map.Entry<String, Integer> entry : map.entrySet()) {
            if(!entry.getValue().equals(0)) {
                answer = entry.getKey();
                break;
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        String[] participant = {"mislav", "stanko", "mislav", "ana"};
        String[] completion = {"stanko", "ana", "mislav"};
        System.out.println(solution(participant, completion));

    }
}

 

 

참고

https://kadosholy.tistory.com/120

https://developer-talk.tistory.com/393

https://coding-factory.tistory.com/556

'Algorithm' 카테고리의 다른 글

파일명 정렬  (0) 2023.08.03
[프로그래머스] 방금 그 곡 Java  (0) 2023.08.01
[프로그래머스] 캐시  (0) 2023.07.18
[프로그래머스] Java 요격 시스템  (0) 2023.06.30
[프로그래머스] Java 게임 맵 최단거리  (0) 2023.06.19