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

2022. 6. 4. 19:52·📂 Backend Engineering
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

[프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬  (0) 2022.06.08
[프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용  (0) 2022.06.05
[프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)  (0) 2022.06.04
@PutMapping이용시 오류메시지 해결하기 / not-null property references a null or transient value  (0) 2022.05.27
[Spring] 스프링 DI 사용 시 생성자 주입을 사용하자!  (0) 2022.04.27
'📂 Backend Engineering' 카테고리의 다른 글
  • [프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬
  • [프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용
  • [프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)
  • @PutMapping이용시 오류메시지 해결하기 / not-null property references a null or transient value
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (106) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (38)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바