티스토리 뷰

 

 

💡 나의 풀이 

Hash를 사용하지 않았을 때 나의 풀이 (Hash를 사용한 코드보다 시간복잡도 큼)
처음에 HashMap을 썼다가 사용이 미숙하여 패스..List 썼다가 이중 for문 썼다가 난리ㅠ
저번 스터디 때 친구가 Arrays.sort로 정렬한 뒤 완주한 선수 지워나가는 것에서 힌트를 얻어서 풀었다.
participant와 completion이 정렬되어 있기 때문에 계속 비교해서 값이 같지 않은 것이 나왔을 때
participant[i]를 return하면 완주하지 못한 선수가 나온다.

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        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];
    }
}

 

💡 hash를 이용한 다른 사람의 풀이 

getOrDefault() -> 찾는 키가 존재하면 해당 키의 값을 반환하고, 없으면 기본값을 반환함.
hash.getOrDefault(arg라는 키, arg키가 존재하면 해당 값/없으면 0) 그리고 +1
완주한 선수 completion을 map에 추가할 때 1씩 빼주고, 해당하는 키 값이 0이 아닐 때 완주하지 못한 선수이므로
해당 key를 return하여 출력

import java.util.*;
 
class Solution {
    public String solution(String[] participant, String[] completion) {
        Map<String, Integer> hash = new HashMap<>();
        
        for (String arg : participant){
          hash.put(arg, hash.getOrDefault(arg, 0) + 1);
        }
        for (String arg : completion){
          hash.put(arg, hash.get(arg) - 1);
        }
        for (String key : hash.keySet()) {
          if (hash.get(key) != 0){
             return key;
         }
        }
 
        return null;
    }
}

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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