Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

발전하는 개발자가 되자

프로그래머스 알고리즘: 완주하지 못한 선수 (java) 본문

개발공부/알고리즘

프로그래머스 알고리즘: 완주하지 못한 선수 (java)

백경훈 2019. 2. 13. 00:00

프로그래머스 알고리즘 (java)

완주하지 못한 선수

프로그래머스 (완주하지 못한 선수)

코드 리뷰

맨처음 문제를 보고 참가선수를 리스트에 넣고 완주한 사람 다 리무브로 지워 마지막 남는 선수를 리턴시켰습니다.. 그런데 효율성 태스트에서 통과가 안됬습니다. 그후 고민하다 둘다 리스트에 담고 sort해서 인덱스 끼리 비교 다른 string 일 때 return 시켜 해결했습니다.

public String solution(String[] participant, String[] completion) {
        String answer = "";
        List<String> runUsers = new ArrayList<>(Arrays.asList(participant));
        List<String> finishUsers = new ArrayList<>(Arrays.asList(completion));
        runUsers.sort(String::compareTo);
        finishUsers.sort(String::compareTo);
        for (int i = 0; i < finishUsers.size(); i++) {
            if (!finishUsers.get(i).equals(runUsers.get(i))) {
                return runUsers.get(i);
            }
        }
        return runUsers.get(runUsers.size() - 1);
    }

하지만 문제를 보니 hashMap을 쓰는 문제였습니다. 그래서 다시 풀었습니다.

public String solution2(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hashMap = new HashMap<>();

        for (String s : participant) {
            if (!hashMap.containsKey(s)) {
                hashMap.put(s, 0);
            }
            hashMap.put(s, hashMap.get(s) + 1);
        }

        for (String s : completion) {
            hashMap.put(s, hashMap.get(s) - 1);
        }

        for (String s : hashMap.keySet()) {
            if (hashMap.get(s) != 0) {
                return s;
            }
        }
        return answer;
    }

다른 풀이를 보고 참고한 사항

  • hashMap을 쓸 때 value가 없을 때 조건이 문제라 if문으로 분기 했는데 .getOrDefault() 메소드가 있는 것을 알게 되었습니다.

이 코드가

for (String s : participant) {
    if (!hashMap.containsKey(s)) {
        hashMap.put(s, 0);
    }
    hashMap.put(s, hashMap.get(s) + 1);
}

아래 코드로 줄어듬

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

hashMap 정리

hashMap 기본 메소드 정리

Comments