[프로그래머스] 완주하지 못한 선수 - Java

2025. 4. 22. 19:40·프로그래머스 알고리즘/Java

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

⭐️ 중요 포인트

1. HashMap을 사용해서 <Key : 선수이름, Value: 빈도> 형식으로 동명이인을 포함한 선수이름이 몇 번 나왔는지 저장한다.

2. Hash.getOrDefault()를 사용하여 null값을 처리

3. Hash.entrySet()을 통해 Set<Map.Entry<K, V>> 형태의 Set을 반환받고 이것을 for-each를 통해서 순회한다.

(이 때, 만약 remove()와 같은 삭제 기능을 넣어야 할 경우 "Iterator<Map.Entry<K, V>> iter = map.entrySet().iterator()"를 통해서 iterator를 반환받고 "while(iter.hasNext())"를 통해서 순환하며 값을 remove하면 된다.)

import java.util.*;

class Solution {
    
    static String[] staticParticipant;
    static String[] staticCompletion;
    static Map<String, Integer> hash;
    static List<String> notCompletion;
    
    static void init(String[] participant, String[] completion) {
        staticParticipant = participant;
        staticCompletion = completion;
        hash = new HashMap<>();
        notCompletion = new ArrayList<>();
    }
    
    static void solve() {
        
        for (String key: staticParticipant) {
            /* staticParticipant에서 key를 통해서 값을 넣는데,
            해당 key가 hash에 존재하지 않으면 0을 기본으로 반환하고
            아니면 value를 리턴받아서 +1를 해서 다시 put한다.
            getorDefalut를 사용하는 이유는 원래 hash에서 없는 key를
            호출하면 null 처리를 해줘야하는데 이것을 getOrDefalut()를
            통해서 한 번에 해결할 수 있다.
            */
            hash.put(key, hash.getOrDefault(key, 0) + 1);
        }
        
        // 완주한 사람에 대해서 1씩 감소
        for (String key: staticCompletion) {
            hash.put(key, hash.getOrDefault(key, 0) - 1);
        }
        
        /*
        위 과정이 모두 끝나고 나면 완주하지 못한 사람은 value가 0이 아니기때문에 notCompletion에 저장
        (notCompletion에 저장한 이유는 제한사항에는 완주하지 못한 사람은 무조건 1명이라고 나와있기는
        하지만 확장성을 위해서 이렇게 구현)
        */
        
        for (Map.Entry<String, Integer> entry: hash.entrySet()) {
            if (entry.getValue() != 0) {
                notCompletion.add(entry.getKey());
            }
        }
    }
    
    public String solution(String[] participant, String[] completion) {
        
        init(participant, completion);
        solve();

        return notCompletion.get(0);
    }
}

'프로그래머스 알고리즘 > Java' 카테고리의 다른 글

[프로그래머스] 전화번호 목록 - Java  (0) 2025.04.23
[프로그래머스] 폰켓몬 - Java  (0) 2025.04.22
[프로그래머스] 등굣길 - Java  (1) 2025.04.21
[프로그래머스] 문자열 압축 - Java  (0) 2025.02.03
[프로그래머스] 이상한 문자 만들기 - Java  (0) 2025.02.03
'프로그래머스 알고리즘/Java' 카테고리의 다른 글
  • [프로그래머스] 전화번호 목록 - Java
  • [프로그래머스] 폰켓몬 - Java
  • [프로그래머스] 등굣길 - Java
  • [프로그래머스] 문자열 압축 - Java
리버🐦‍🔥
리버🐦‍🔥
개발새발 개발일기
  • 리버🐦‍🔥
    개발도 개발새발
    리버🐦‍🔥
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • Python
        • Java
      • 프로그래머스 알고리즘
        • Python
        • Swift
        • Java
      • 코드트리 알고리즘
        • Python
      • Spring boot
        • 스프링 부트 3 백엔드 개발자 되기(자바편)
      • SwiftUI
      • UIKit
      • Programming Language
        • Swift
        • Java
      • 공부해야될 것
        • iOS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백앤드 개발자
    문자열
    코드베이스
    스프링 부트 3 백엔드 개발자 되기 : 자바편
    스프링 부트 3
    Python
    애너테이션
    programmers
    스프링 부트
    uikit
    데이터베이스
    그래프
    파이썬
    Swift
    큐
    스프링 부트 3 백앤드 개발자 되기 : 자바편
    프로그래머스
    ci/cd
    구현
    너비 우선 탐색
    깊이 우선 탐색
    UITextView
    스위프트
    Code-based
    Java
    그리디 알고리즘
    Baekjoon
    자바
    ios
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
리버🐦‍🔥
[프로그래머스] 완주하지 못한 선수 - Java
상단으로

티스토리툴바