2020. 12. 23. 14:26ㆍ프로그래밍/알고리즘
💁♀️ 링크
programmers.co.kr/learn/courses/30/lessons/42576
📃 문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
-
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
-
completion의 길이는 participant의 길이보다 1 작습니다.
-
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
-
참가자 중에는 동명이인이 있을 수 있습니다.
🐾 문제풀이
해시를 사용하여 푸는 문제로, HashMap 컬렉션을 사용하여 문제를 풀 수 있다.
HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션으로
데이터를 Key(키)와 Value(값)의 쌍으로 저장한다.
Key - 컬렉션 내에서 유일
Value - key와 달리 데이터 중복 허용
participant배열을 루프를 돌려 HashMap의 key값은 '이름', value값은 '해당 이름을 가진 사람 수 + 1' 로 넣는다.
예) participant = [mislav, stanko, mislav, ana] 인 경우
HashMap에는 {mislav, 2}, {stanko, 1}, {ana, 1} 으로 담기게 된다.
동명이인이 2명인 경우 value = 2, 3명인 경우 value = 3
위와 같은 방식으로,
completion배열을 루프를 돌려 key에는 '이름', value에는 '해당 이름을 가진 사람 수 - 1' 을 넣는다.
예) completion = [mislav, stanko, ana] 인 경우
HashMap에는 {mislav, 1}, {stanko, 0}, {ana, 0} 으로 담기게 된다.
completion배열에 완주자 이름이 있으면 value의 값이 0 이 되고, 없으면 1이 될 것이다.
💻 코드
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
// 이름, 해당이름을 가진 사람 수 ++
for(String p : participant){ map.put(p, map.getOrDefault(p, 0) + 1); }
// 이름, 해당이름을 가진 사람 수 --
for(String c : completion){ map.put(c, map.getOrDefault(c, 0)-1); }
// value가 0이 아니면 완주자명단에 이름이 없는 것.
for(String m : map.keySet()){
if(map.get(m) != 0) answer = m;
}
return answer;
}
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[프로그래머스] [Level1] 체육복 - Java (0) | 2020.12.25 |
---|---|
[프로그래머스] [Level1] 모의고사 - Java (0) | 2020.12.23 |
[프로그래머스] [Level1] 두 개 뽑아서 더하기 - Java (0) | 2020.12.22 |
[프로그래머스] [Level1] 크레인 인형뽑기 게임 - Java (0) | 2020.12.22 |
[SW Expert Academy] 1213. String- Java (0) | 2019.08.29 |