728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42576
풀이
해시 문제라고 써있어서 그냥 해쉬로 쉽게 풀었다.
이제
// hashMap에 사람 추가
// 동명이인이 있을 수도 있으니 이미 있는 사람이면 원래 값에 +1
for (String name : participant) {
hashMap.put(name, hashMap.getOrDefault(name, 0) + 1);
}
getOrDefault() 함수는 잘 쓸 수 있게 된 것 같다!
근데 마지막에 출력하기 전에
for (String name : hashMap.keySet()) {
if (hashMap.get(name) != 0) { // name을 이름으로 가진 사람이 있으면 그 사람이 완주하지 못한거임!
answer = name;
break;
}
}
hashMap.keySet() 함수를 비롯한 hashMap의 함수들은 더 자연스럽게 사용할 수 있게 공부해놔야겠다!!
해시말고 그냥 배열을 정렬해서 앞에서부터 비교하다가 다르면 그 사람을 출력하는 방식으로도 풀 수 있음!!
자세한건 주석으로!
코드
// 코딩테스트 연습 - 해시 - 완주하지 못한 선수
// https://programmers.co.kr/learn/courses/30/lessons/42576
package PROGRAMMERS.level1;
import java.util.HashMap;
public class Num42576_완주하지못한선수 {
private static class Solution {
private String solution(String[] participant, String[] completion) {
HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
// hashMap에 사람 추가
// 동명이인이 있을 수도 있으니 이미 있는 사람이면 원래 값에 +1
for (String name : participant) {
hashMap.put(name, hashMap.getOrDefault(name, 0) + 1);
}
// 이걸로도 가능
// for (int i = 0; i < participant.length; i++) {
// hashMap.put(participant[i], hashMap.getOrDefault(participant[i], 0) + 1);
// }
// 완주한 사람은 -1씩 해주기
for (String name : completion) {
hashMap.put(name, hashMap.get(name) - 1);
}
// 이걸로도 가능
// for (int i = 0; i < completion.length; i++) {
// hashMap.put(completion[i], hashMap.getOrDefault(completion[i], 0) - 1);
// }
String answer = "";
for (String name : hashMap.keySet()) {
if (hashMap.get(name) != 0) { // name을 이름으로 가진 사람이 있으면 그 사람이 완주하지 못한거임!
answer = name;
break;
}
}
return answer;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.solution(new String[]{"leo", "kiki", "eden"}, new String[]{"kiki", "eden"}));
System.out.println(sol.solution(new String[]{"marina", "josipa", "nikola", "vinko", "filipa"}, new String[]{"josipa", "filipa", "marina", "nikola"}));
System.out.println(sol.solution(new String[]{"mislav", "stanko", "mislav", "ana"}, new String[]{"stanko", "ana", "mislav"}));
}
}
참고 - HashMap 메서드!
https://gre-eny.tistory.com/97
코딩 테스트에서 자주 쓰일 것 같은 애들?
- get(), getOrDefault(), put() 등은 당연한 거고
- clear() - hashmap 안의 애들을 다 날려줌
- remove() - key에 해당하는 <key, value> 쌍을 없애고 value 반환. 없으면 null 반환
- entrySet() - hashMap의 모든 요소를 'key = value' 형태로 묶어 Set으로 반환
- keySet() - 모든 요소의 키만 'key' 형태로 묶어서 Set으로 반환
- values() - 모든 요소의 값만 묶어 반환
- 등등
728x90