728x90
문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participantcompletionreturn
["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"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
소요시간 약 4시간 30분.
테스트 케이스는 쉽게 통과 할수 있었으나 채점시 효율성 부분에서 자꾸 실패가 나서 이것저것 많이 시도를 해봤었고,
문제를 여러번 읽다보니 문제 경로가 해시 하위 문제임을 확인하고 나서는...
HashMap을 이용하여 문제를 해결하기 시작했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
package level1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class Marathon {
/// Fields
private String[] participant;
private String[] completion;
/// Constructor
public Marathon(){
System.out.println("Create Default Constructor");
problem();
}
/// Method
public void problem(){
/**
* 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
* completion의 길이는 participant의 길이보다 1 작습니다.
* 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
* 참가자 중에는 동명이인이 있을 수 있습니다.
*/
int caseNo = 2;
String caseSol = "Map"; // 처리할 객체 선택 List : ArrayList, Map : HashMap;
switch (caseNo) {
case 1:
participant = new String[] {"leo", "kiki", "eden"};
completion = new String[] {"eden", "kiki"};
break;
case 2:
participant = new String[] {"marina", "josipa", "nikola", "vinko", "filipa"};
completion = new String[] {"josipa", "filipa", "marina", "nikola"};
break;
case 3:
participant = new String[] {"mislav", "stanko", "mislav", "ana"};
completion = new String[] {"stanko", "ana", "mislav"};
break;
}
String answer = "";
switch (caseSol) {
case "List":
answer = solutionList(participant, completion);
break;
case "Map":
answer = solutionMap(participant, completion);
break;
default:
break;
}
System.out.println(answer);
}
public String solutionList(String[] participant, String[] completion){
String answer = "";
// 완주한 사람들 리스트화
List<String> compList = new ArrayList<String>(Arrays.asList(completion));
// 참가자 사람들 만큼 도는 for문
for(String part : participant){
// 완주리스트에서 참가자가 포함되어 있는지 체크
if(compList.contains(part)){
// 포함되어 있으면 완주리스트 에서 제거
compList.remove(part);
} else {
// 포함되어 있지 않은경우 답으로 세팅
answer = part;
}
}
return answer;
}
public String solutionMap(String[] participant, String[] completion){
// ★ 중요한 기본 개념 : HashMap은 중복을 허용하지 않는다는 점을 이용한 알고리즘
String answer = "";
HashMap<String,Integer> hsm = new HashMap<String,Integer>();
// 참가자 리스트를 HashMap에 저장 (단, 같인 키값 존재시 +1 처리 업데이트 처리)
for(String part : participant) hsm.put(part, hsm.getOrDefault(part, 0)+1);
// 완주자 리스트를 HashMap에 저장 (단, 같은 키값 존재시 -1 처리 업데이트)
for(String comp : completion) hsm.put(comp, hsm.get(comp)-1);
// 저장한 데이터 디버깅용 (프로그래머스 테스트시 주석처리 하시면 됩니다.)
// System.out.println("Map : " + hsm.toString());
// hsm의 키값 Iterator 객체화
Iterator<String> keySet = hsm.keySet().iterator();
// 가지고 있는 key 개수 만큼 동작하는 반복문
while(keySet.hasNext()){
// getKey
String key = keySet.next();
// 완주한 사람은 0이므로 완주하지 못한 사람을 얻을 수 있음.
if(hsm.get(key)!=0) answer = key;
}
// 완주하지 못한 사람 리턴
return answer;
}
}
|
cs |
제출 및 체점 결과
728x90
'Programmers > Level1' 카테고리의 다른 글
[Programmers Level1] 가운데 글자 가져오기 정답 및 문제 풀이 (0) | 2021.04.30 |
---|---|
[Programmers Level1] 문자열 내 p와 y의 개수 정답 및 문제 풀이 (0) | 2021.04.29 |
[Programmers Level1] 신규 아이디 추천 정답 및 풀이 설명 카카오 블라인드 공개채용 문제 (0) | 2021.04.28 |
[Programmers Level1] 모의고사 정답 및 풀이 설명 (0) | 2021.04.27 |
[Programmers Level1] 크레인 인형뽑기 게임 정답 및 풀이 설명 (0) | 2021.04.23 |