본문 바로가기

Algorithm/프로그래머스

프로그래머스 level1 문제 : 완주하지 못한 선수(java)

반응형
String answer = "";

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

for (String name : participant) {
if (map.get(name) == null) {
map.put(name, 0);
} else {
int value = map.get(name) + 1;
map.put(name, value);
}
}

for (String name : completion) {
int value = map.get(name) - 1;
map.put(name, value);
}

for (String name : map.keySet()) {
if (map.get(name) == 0) answer = name;
}

return answer;


오랜만에 문제를 푸니 하나도 모르겠네요..


매일 풀면서 좀 익혀야겠어요


저는 우선 생각한게 map이었습니다.


배열 두개가 나왔고 공통된것을 찾아 없애자고 생각했습니다.


하지만 돌로 되어버린 제 머린 생각을 멈췄고.... 간단하게 구현해보자를 떠올렸습니다.


첫 key 값들로 참여자를 넣었고 value 값으로 0을 넣어줬습니다. 그리고 중복되는 선수들은 +1을 해줬습니다.


그리고 완주자들의 이름을 key값에 넣어 get(key)로 value를 받아와 완주를 했다면 -1을 해줬습니다.(완주자는 -1로, 완주 못한 사람인 0을 찾기 위해서!!!)


이렇게 생각하다보니 위처럼 구현이 되었습니다.


정말 모르겠네요...


이 쉬운걸 1시간을 풀었네요....흑흑


다른 분의 정답입니다.


Arrays.sort(participant);
        Arrays.sort(completion);
        int i;
        for ( i=0; i<completion.length; i++){

            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[i];

오름차순으로 정렬을 해주어서 알파벳 순서대로 정렬이 되었습니다.


정렬 후, 완주자의 완주 순서부터 확인해 안맞으면 return해줍니다.


이걸 좀 더 보기 쉽게 고치면



Arrays.sort(participant);
Arrays.sort(completion);

for (int i=0; i<completion.length; i++){
if (!participant[i].equals(completion[i])){
return participant[i];
}
}
return null;

이렇게도 가능하겠네요..


모두 화이팅

반응형