https://programmers.co.kr/learn/courses/30/lessons/42576
첫번째 풀이
해결방안
참가자들 전원을 HashMap에 넣어주고 완주한 사람들의 이름이 담긴 completion의 이름들을 HashMap에서 찾아서 제거해줌
단, 동명 이인이 있을 수 있어 HashMap의 value를 사람 수로 하고 제거할 때 사람 수가 1이면 remove하고 1 초과이면 사람 수를 줄이는 방법을 사용함
코드
import java.util.*;
//완주하지 못한 선수
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> pMap = new HashMap<>();
for(int i=0; i<participant.length; i++){
if(pMap.containsKey(participant[i])){
pMap.put(participant[i], pMap.get(participant[i]) + 1);
}
else{
pMap.put(participant[i], 1);
}
}
// completion에 있는 경우 HashMap에서 제거
for(int i=0; i<completion.length; i++){
// 동명이인일 경우
if(pMap.get(completion[i]) > 1){
pMap.put(completion[i], pMap.get(completion[i])-1);
}
else{
pMap.remove(completion[i]);
}
}
// HashMap에 남아 있는 이름이 완주 못한 선수
Set<String> keys = pMap.keySet();
for(String key : keys){
System.out.println(key);
answer = key;
}
return answer;
}
}
두번째 풀이
해결방안
먼저 completion의 배열을 hashmap에 넣어주고 participant배열의 값들을 빼주면서 -1이 됬거나 없는 이름을 answer에 담아줌
코드
import java.util.*;
// 완주하지 못한 선수
class Solution {
// 참여한 선수 // 완주한 선수
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> map = new HashMap<>();
//완료한사람을 HashMap에 넣음 (value는 해당 이름을 가진 사람 수)
for(int i=0; i<completion.length; i++){
if(map.containsKey(completion[i])){
map.put(completion[i], map.get(completion[i])+1);
}
else{
map.put(completion[i], 1);
}
}
// 사람을 찾았을 때 없거나 value=-1일때를 찾음
for(int i=0; i<participant.length; i++){
if(map.containsKey(participant[i])){
map.put(participant[i], map.get(participant[i])-1);
if(map.get(participant[i]) == -1){
answer = participant[i];
break;
}
}
else{
answer = participant[i];
break;
}
}
return answer;
}
}
'Development Logs > Algorithms' 카테고리의 다른 글
[JAVA] 프로그래머스: 위장 (코딩테스트 고득점 kit > 해쉬) (0) | 2020.07.13 |
---|---|
[JAVA] 프로그래머스: 전화번호 목록 (코딩테스트 고득점 kit > 해쉬) (0) | 2020.07.11 |
[JAVA] 프로그래머스: 탑 (코딩테스트 고득점 kit > 스택/큐) (0) | 2020.07.11 |
[JAVA] 백준 9012번: 괄호 (0) | 2020.07.08 |
[JAVA] 백준 10828번: 스택 (0) | 2020.07.08 |