본문 바로가기

코딩테스트 연습/JAVA

[JAVA/알고리즘] 완주하지 못한 선수

반응형

 

HashMap을 사용했고, 모든 참가자를 HashMap에 넣은 다음에 key를 Integer로 줘서(넣을 때마다 1씩) 완주한 선수인 경우에 1씩 줄여주었다. 처음엔 boolean으로 줘서 완주하면 true로 바꿔준 다음에 유일한 false만 반환하려 했으나 동명이인 문제로 그냥 0, 1, 2 이런 식으로 관리하였다.

 

처음에 선수를 넣을 때 +1씩 증가하게 했더니, 원래 HashMap이 없어서 새로 생성해야하는 경우 NullPointer 에러가 나길래 조건문을 추가했는데, 다른 사람들 풀이를 보니까 getOrDefault라는 메소드를 사용해주었다. 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드라고 한다. 아래 참고했던 블로그 링크를 첨부한다.

다른 풀이 중에 두 배열을 정렬한 다음에 일치하지 않는 시점에 값을 반환하는 풀이도 있었는데, 덧글들을 보니 시간 복잡도가 늘어나는 단점이 있다고 한다.

 

 

 

내 풀이

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap<String, Integer> players = new HashMap<String, Integer>();
        
        for (String p : participant) {
            if (players.get(p) == null) {
                players.put(p, 1);
            } else {
                players.put(p, players.get(p)+1);
            }
        }
        
        for (String c : completion) {
            players.put(c, players.get(c)-1);
        }
        
        for (Map.Entry<String, Integer> player : players.entrySet()) {
            if (player.getValue() != 0) {
                return player.getKey();
            }
        }
        
        return "";
    }
}

 

 

다른 풀이

논리 구조 자체는 비슷한 것 같은데 코드가 살짝 다르다. 물론 개인적으로는 for문이 한줄일지라도 괄호를 선호하긴 하지만 내 코드보다 확실히 더 깔끔한 것 같다.

 

 

getOrDefault 참고자료

https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C

 

[JAVA] Map - getOrDefault 이란? 사용법 및 예제

getOrDefault - 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드 사용 방법 getOrDefault(Object key, V DefaultValue) 매개 변수 : 이 메서드는 두 개의 매개 변수를 허용합니.

junghn.tistory.com

 

 

예전엔 못풀었던 문제인데, 확실히 수업 하나를 듣고 나니까 조금이지만 실력이 는 것 같기는 하다. 다만 마지막 과제 이후로 약 1달이 넘어가는 시점인 지금.. 다시 다 까먹음.. 방학 동안 많이는 못하더라도 조금씩 연습해두려고 한다.

반응형