[코딩테스트] programmers - 완주하지 못한 선수(알고리즘 고득점 kit) [JAVA]

2025. 2. 2. 03:27·코딩테스트
728x90
반응형
SMALL

문제링크

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

 

프로그래머스

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

programmers.co.kr


문제설명

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

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


제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예 


최종 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String,Integer> resultMap = new HashMap<>();
        
        // getOrDefault 동명이인일 경우 같은 키로 접근하여 value를 +1 
        for(String name : participant) {
            resultMap.put(name, resultMap.getOrDefault(name, 0) + 1);
        }
        // Map에서 값을 업데이트 해주려면 put으로 해줘야 업데이트가 가능
        for(String name : completion) {
            resultMap.put(name, resultMap.getOrDefault(name, 0) - 1);
        }
        
        // Map의 value가 0이 아닌 name return 
        for(String result : resultMap.keySet()) {
            if(resultMap.get(result) != 0){
                answer = result;
            }
        }
        
        return answer;
    }
}

 

이 문제는 단순히 두 배열을 비교하는 문제라고 생각하면 된다.

처음 배열을 List로 바꿔서 하나씩 지워볼까 생각했지만 너무 비효율 적인 방법이라고 생각했다.

다음 정렬을 시켜서 비교를 할까 생각했지만 그 역시 효과적인 방법이라고 생각하지 않았다. 

그래서 생각한게 Map을 사용하여 해당 name의 value값을 조정하여 처리를 해보자 생각했다.

동명이인이 있을경우엔 동일한 key로 접근해야 하기 때문에  getOrDefault 함수로 처리했고 

간단하게 int로 value 값을 관리하였다. 

 

1. 참여자 명단을 key값으로 저장하여 해당 key 의 value를 1로 세팅

2. 완주자 명단에 있는 key값으로 접근하여 해당 key의 value를 -1 

3. Map에 value가 0이 아닌 key를 return 

 


 

getOrDefault 함수?

✔ getOrDefault(key, defaultValue)는 Java의 HashMap에서 특정 키의 값이 존재하면 가져오고, 없으면 기본값을 반환하는 메서드입니다.
✔ 만약 key가 map에 없으면, defaultValue가 반환됩니다.
✔ 사용 예: 카운트, 초기값 설정, 기본값 처리 등에 유용합니다! 

 

getOrDefault() vs containsKey() 차이점

getOrDefault(key, defaultValue) key가 있으면 값 반환, 없으면 기본값 반환 map.getOrDefault("grape", 0) → 0
containsKey(key) key가 존재하는지 확인 (true/false 반환) map.containsKey("grape") → false

 

✔ getOrDefault()는 값 자체를 반환하지만, containsKey()는 존재 여부만 확인!
✔ 값이 필요하면 getOrDefault()를, 존재 여부만 확인하려면 containsKey()를 사용!

728x90
반응형
LIST

'코딩테스트' 카테고리의 다른 글

[코딩테스트] programmers - 기능 개발 (알고리즘 고득점 kit) [JAVA]  (0) 2025.03.13
[코딩테스트] programmers - 같은 숫자는 싫어 (알고리즘 고득점 kit) [JAVA]  (0) 2025.03.11
[코딩테스트] programmers - 네트워크 (알고리즘 고득점 kit) [JAVA]  (1) 2025.02.02
[코딩테스트] programmers - 타겟넘버 (알고리즘 고득점 kit) [JAVA]  (1) 2025.01.25
[코딩테스트] programmers - 폰켓몬 (알고리즘 고득점 kit) [JAVA]  (1) 2025.01.13
'코딩테스트' 카테고리의 다른 글
  • [코딩테스트] programmers - 기능 개발 (알고리즘 고득점 kit) [JAVA]
  • [코딩테스트] programmers - 같은 숫자는 싫어 (알고리즘 고득점 kit) [JAVA]
  • [코딩테스트] programmers - 네트워크 (알고리즘 고득점 kit) [JAVA]
  • [코딩테스트] programmers - 타겟넘버 (알고리즘 고득점 kit) [JAVA]
junhyeokkk
junhyeokkk
나의 개발자 성장기
  • junhyeokkk
    백엔드 개발자 준혁의 성장일지
    junhyeokkk
  • 전체
    오늘
    어제
    • 분류 전체보기 (59)
      • Flutter (13)
      • 개발환경구축 (3)
      • HTTP (0)
      • CS지식 (5)
      • 코딩테스트 (10)
      • JAVA (7)
      • 데이터베이스 (7)
      • Node.js (9)
      • TypeScript (1)
      • Azure (3)
      • Git (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    마이크로소프트sql
    node
    programmers
    디자인패턴
    자바
    백엔드개발
    sql튜토리얼
    코딩테스트
    알고리즘
    Microsoft
    CS지식
    개발자
    db
    프로그래머스
    js
    cosmos db
    DART
    데이터베이스
    azure
    MSsql
    개발자준비
    nodejs
    백엔드개발자
    Flutter
    Typescript
    RDBMS
    Java
    백엔드
    node.js
    라이브러리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
junhyeokkk
[코딩테스트] programmers - 완주하지 못한 선수(알고리즘 고득점 kit) [JAVA]
상단으로

티스토리툴바