[프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기

2022. 6. 4. 19:52·💻 개발/알고리즘
728x90
반응형
🌌프로그래머스 완주하지 못한 선수 - 자바(java)

 

📚 문제 설명

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

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


👨🏻‍💻 제한 조건

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

📖 예시

💻 입력 / 출력 

participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"]  "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"]  ["stanko", "ana", "mislav"]  "mislav"

🖨️ 입력 / 출력 추가 설명 

예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

💻 작성 코드

import java.util.HashMap;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();
        
        for(String player : participant) 
            hm.put(player, hm.getOrDefault(player, 0) +1);
        for(String player : completion)
            hm.put(player, hm.get(player) -1);
        
        for(String key : hm.keySet()) {
            if(hm.get(key) != 0){
                answer = key;
                break;
            }            
        }                     
        return answer;
    }
}

🗝️ 접근법 

  1. 해쉬로 접근하기
  2. participant와 completion을 비교해서 없는 값이 return 값 
  3. 동명이인 때문에 getOrDefault()를 사용

🎉 해석 

  • participant길이 만큼 for each문을 돌려주고, 동명이인의 경우 체크를 위한 .getOrDefault() 함수를 사용
  • participant로 해당 이름의 키 값 별, +1을 해줌
  • completion부분
for(String player : completion)
            hm.put(player, hm.get(player) -1);
  • hm.get(player)의 key:value를 통해  저장된 value 값 1을 불러와 hm.get(player) = 1이 됨 
  • completion 명단에 key값이 존재하면 value에 -1을 해줌
  • [for each문 동작 및 값 변화]
    • ⭐️ hm.put(player, hm.get(player) -1);  =  hm.put(player, 1 -1); = hm.put(0);
    • 즉 hm에 0인 값을 넣는다.
  • key값의 value값이 0이 아닌 경우 완주하지 못한 인원
  • .keySet() 함수를 사용해서 hashMap의 전체 키 값을 가져옴
  • 0 체크
  • for each문을 돌려서 해당 키의 value 값이 0이 아니면 answer에 저장

🏃🏻‍♀️배운것

1. .getOrDefault() 

- 찾는 키가 존재하면 찾는 키의 값을 반환하고 없거나 null이면 기본 값을 반환하는 메소드

<사용법>

.getOrDefault(key값, key값 없을 경우 리턴값);

2. keySet() 메소드

- key의 값만 출력 

 

3. entrySet() 메소드 

- key와 value값 출력 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > 알고리즘' 카테고리의 다른 글

콜라츠 추측 함수로 쪼개어 풀어보기  (0) 2022.10.01
[프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬  (0) 2022.06.08
[프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용  (0) 2022.06.05
[프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)  (0) 2022.06.04
[프로그래머스 Level1] 직사각형 별찍기-자바(Java)  (0) 2022.06.04
'💻 개발/알고리즘' 카테고리의 다른 글
  • [프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬
  • [프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용
  • [프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)
  • [프로그래머스 Level1] 직사각형 별찍기-자바(Java)
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (109)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (72)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (13)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (15)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (0)
        • 제품리뷰 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    창업패키지후기
    QueryDSL
    스냅샷과히스토리성 차이
    db 날린 썰
    typedi 동작원리
    nestjs pipe
    스냅샷과 히스토리
    githubaction 라벨 ci/cd
    nestjs pipe body
    서이추
    githubaction 라벨 배포
    di란
    스냅샷방식
    validation failed (numeric string is expected)
    디비스냅샷
    di동작원리
    해피해킹 카라비너
    개발썰
    di의존성
    JPA
    해피해킹 꿀팁
    db 날림
    해피해킹 키매핑
    해피해킹 커스텀
    스냅샷과로그성
    토이프로젝트개발일지
    azure ci/cd
    typedi란
    db 초기화
    해피해킹 방향키
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
[프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기
상단으로

티스토리툴바