[프로그래머스|JAVA] 완주하지 못한 선수 | Map 사용 ⭕️ , getOrDefault(), 향상된 for문 연습 중💬, iterator() 활용

2025. 8. 14. 22:16·💻코딩/💡Programmers
728x90
반응형

[문제 링크]

 

프로그래머스

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

programmers.co.kr

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

📍 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        Map<String, Integer> map = new HashMap<>();

        // 참가자 전원 추가
        for (String p : participant) {
            map.put(p, map.getOrDefault(p, 0) + 1);
        }

        // 완주한 사람 제거
        for (String c : completion) {
            int n = map.get(c) - 1;
            if(n == 0) map.remove(c); //map에 존재하면 삭제 - 필요 없
            else map.put(c, n);
         }

        // 남은 1명이 완주하지 못한 선수
        return map.keySet().iterator().next();
    }
}

💡 접근법

  • 참가자 전원을 map에 추가
  • getOrDefault() -> map에 값을 넣을 때, 값이 없으면 0을 넣는다.
  • 동명이인을 생각하여 값을 +1 하여 체크한다.
  • 완주한 사람이 map에 담겨있다면 -1을 하고,
  • n의 값이 0이 되면 map에서 삭제한다. => 즉, 완주 했단 뜻
  • n이 1 이상이면 다시 put하여 업데이트한다.
  • 결과적으로 map의 첫번째 인자값을 반환하면 답이다.

✅ map.keySet().iterator().next();

→ map.keySet() → Map의 모든 key 집합(Set)을 가져옴

→ .iterator() → key 집합을 순회할 수 있는 반복자(Iterator) 생성

→ .next() → 반복자의 첫 번째 key를 가져옴


📍 문제 해결은 되지만 효율성 떨어지는 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        ArrayList<String> list = new ArrayList<>();

        // 참가자 전원 리스트에 추가
        for (String p : participant) {
            list.add(p);
        }

        // 완주한 사람 제거
        for (String c : completion) {
            list.remove(c); // 값으로 제거
        }

        // 남은 1명이 완주하지 못한 선수
        return list.get(0);
    }
}
  • 처음에 위와 같이 작성하였으나 두번째 테스트 케이스에서 실패했다.
    1. sort()를 활용하지 못했다.
    2. 동명이인을 생각하지 못했다.
  • 위의 2가지가 원인인 것 같다.
  • sort()를 하여 작은 값부터 비교를 하면 해결이 된다.

 

다른 문제를 풀다보면 sort()를 잘 활용하면

간결하게 문제를 해결하는 경우가 종종있다.

이 문제도 그런 케이스이고, sort()의 중요성을 또 한번 깨달았다.

또한, iterator를 잘 다뤄보지 않아서

이 내용도 포스팅할 생각이다.

 

 

 

 

728x90
반응형

'💻코딩 > 💡Programmers' 카테고리의 다른 글

[프로그래머스|JAVA] 같은 숫자는 싫어 🙅‍♀️ | ArrayList, stream 방식, 향상된 for문 활용  (1) 2025.08.14
[프로그래머스|JAVA] 의상 | 2️⃣번째 풀이 | Map 활용하여 간결 & 가독성 좋게 💡 , 향상된 for문, getOrDefault()  (4) 2025.08.14
[프로그래머스|JAVA] 폰켓몬 | Set 사용 ⭕️ , contains()  (2) 2025.08.14
[프로그래머스|JAVA] 가장 큰 수 찾기 | Level 0  (0) 2025.08.14
[프로그래머스|JAVA] 자연수 뒤집어 배열로 만들기 | Stream 방식  (1) 2025.08.14
'💻코딩/💡Programmers' 카테고리의 다른 글
  • [프로그래머스|JAVA] 같은 숫자는 싫어 🙅‍♀️ | ArrayList, stream 방식, 향상된 for문 활용
  • [프로그래머스|JAVA] 의상 | 2️⃣번째 풀이 | Map 활용하여 간결 & 가독성 좋게 💡 , 향상된 for문, getOrDefault()
  • [프로그래머스|JAVA] 폰켓몬 | Set 사용 ⭕️ , contains()
  • [프로그래머스|JAVA] 가장 큰 수 찾기 | Level 0
망꼬누나
망꼬누나
공부한 내용을 정리하는 공간입니다.
  • 망꼬누나
    망꼬누나의 개발 공부
    망꼬누나
  • 전체
    오늘
    어제
    • 분류 전체보기 (165)
      • ℹ️ 정보 및 실습 (19)
        • ☑️ Git & GitHub (8)
        • ☑️ 프로젝트 (6)
        • ☑️ 회고 및 후기 (5)
      • 🛠 CS (1)
      • 💻코딩 (88)
        • 💡Baekjoon (17)
        • 💡Programmers (71)
      • ✏️공부 (48)
        • 💡OS (1)
        • 💡Network (6)
        • 💡SpringBoot (9)
        • 💡JAVA (21)
        • 💡SQL (1)
        • 💡DB (2)
        • ☁️ Cloud (4)
        • 💡알고리즘 (4)
      • 📌 자격증 (6)
        • 📝정보처리기사 (3)
        • 📝SQLD (3)
  • 블로그 메뉴

    • 홈
    • github
  • 나의 GitHub Contribution 그래프
    Loading data ...
  • 인기 글

  • 태그

    프로그래머스
    baekjoon
    알고리즘
    map
    자바
    github
    Set
    AWS
    백엔드
    데브코스
    Stream
    네트워크
    Java
    프로그래머스 #JAVA
    동시성제어
    코딩테스트
    GIT
    자료구조
    S3
    트랜잭션
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.5
망꼬누나
[프로그래머스|JAVA] 완주하지 못한 선수 | Map 사용 ⭕️ , getOrDefault(), 향상된 for문 연습 중💬, iterator() 활용
상단으로

티스토리툴바