개발일지

[Java] sort정렬, HashMap / 완주하지 못한 선수 본문

Algorithm

[Java] sort정렬, HashMap / 완주하지 못한 선수

O'mil 2024. 4. 25. 00:33
728x90

🔗 링크

완주하지 못한 선수

 

📌 문제 설명

  • 참여한 선수들의 이름이 담긴 배열 participant, 완주한 선수들의 이름이 담긴 배열 completion
  • 완주하지 못한 선수의 이름을 리턴

 

👀 예제

 

✏️ 풀이 순서

  • 정렬 이용해서 풀기
    1. 두 배열 sort정렬하기
    2. 두 배열이 다르게 나올 때까지 반복문 돌리기
    3. 마지막까지 다른게 안 나온 거면 마지막 주자가 완주하지 못한것.

 

  • Hash 이용해서 풀기
    1. HashMap 생성
      • HashMap<String, Integer>: Key는 String, Value는 Integer로 정의
    2. HashMap에 참가자 추가
      • HashMap.put(Key, Value): HashMap에 Key와 Value를 한 쌍으로 입력하는 함수
      • HashMap.getOrDefault('B', 0): 'B'라는 Key에 해당하는 Value가 있으면 가져오고, 없으면 0을 기본값으로 지정하겠다
        ex) maria라는 key가 Value 1과 함께 저장되어 있음 → 1을 가져옴 + 1 → 2로 저장
               maria라는 key 없음 → 0으르 가져옴 + 1 → 1을 저장
    3. HashMap에서 완주자 삭제
      • HashMap.get(Key): Key에 해당되는 Value를 불러옴
    4. Value값이 0이 아닌 참가자 찾기
      • Iterator(반복자): 저장되어 있는 요소를 읽어오는 방법
        • hasNext(): 읽어올 요소가 있으면 true, 없으면 false 리턴
        • next(): 다음 데이터를 리턴
        • remove(): next()로 리턴받은 요소를 삭제
      • HashMap.entrySet(): 키-값의 데이터를 결합된 형태로 Set에 저장하여 반환
        → 키-값이 묶인 데이터를 가져오기 때문에 keySet()보다 좋은 성능을 보임
      • HashMap.keySet(): HashMap이 들고 있는 전체 Key의 배열을 반환하는 함수
      • HashMap.get(Key): Key에 해당하는 Value를 반환하는 함수
      • 즉, 전체 Key를 하나씩 확인해서 Value가 0이 아닌 경우 answer에 담아주는 동작을 하는 코드

 

💻 코드

1. 정렬

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        
        // 두 배열 정렬
        Arrays.sort(participant);
        Arrays.sort(completion);
        
        // 완주자 배열을 기준으로 두 배열이 다를 때까지 반복문 돌리기
        for (int i = 0; i < completion.length; i++) {
            if (!participant[i].equals(completion[i])) {
                return participant[i];
            }
        }
        
        // 찾지 못하면 마지막 주자가 완주 못한 거임
        return participant[participant.length - 1];
    }
}

 

2. HashMap

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        // HashMap 생성 (Key는 String, Value는 Integer)
        HashMap<String, Integer> map = new HashMap<>();
        
        // HashMap에 참가자 추가
        for (String player: participant) {
            map.put(player, map.getOrDefault(player, 0) + 1);
        }
        
        // HashMap에서 완주자 삭제
        for (String player: completion) {
            map.put(player, map.get(player) - 1);
        }
        
        // Value가 0이 아닌 참가자 구하기
        Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
        
        while (iter.hasNext()) {
            Map.Entry<String, Integer> entry = iter.next();
            if (entry.getValue() != 0) {
                answer = entry.getKey();
                break;
            }
        }
        return answer;
        
    }
}

 

 


📚 레퍼런스

[Java/자바] 해시맵, HashMap 사용법과 EntrySet, Iterator

[Java 개념정리] HashMap 관련함수

 

 

 

728x90

'Algorithm' 카테고리의 다른 글

[JAVA] Iterator entrySet(), keySet(), values()  (0) 2024.04.25
[JAVA] 전화번호 목록  (0) 2024.04.25
[Java] 중복제거 (HashSet) / 폰켓몬  (0) 2024.04.24
Set / HashSet  (0) 2024.04.24
시간 복잡도  (0) 2023.11.17
Comments