1. 폰켓몬
중복이 허용되지 않는 HashSet 자료구조를 사용하면 바로 풀 수 있는 문제
ex) [3,3,3,2,2,4]를 HashSet에 저장하면 중복되는 숫자를 제외한 3,2,4만 저장된다.
import java.util.*;
import java.io.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int pokemon = nums.length/2;
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
int count = 0;
for(int n: set) {
count++;
if(count == pokemon) break;
}
answer = count;
return answer;
}
}
2. 완주하지 못한 선수
'동명이인이 있을 수 있다' 라는 조건이 있으므로 HashSet은 절대 사용하면 안되는 것을 알 수 있다. (set은 중복이 허용되지 않으므로)
HashMap을 이용하자.
참가자들을 map에 <참가자이름, 1>로 put하고 참가자가 완주했을 경우 value 값을 0으로 바꿔주면, value가 0인 참가자들이 정답이 된다.
하지만 이때, map.put(who,1);로 하면 틀린 코드가 된다. '동명이인이 있을 수 있다' 라는 조건을 처리할 수 없기 때문이다.
따라서 getOrDefault를 사용해주어 이 조건을 처리해줘야 한다.
☆getOrDefault: 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환됨
import java.io.*;
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String,Integer> map = new HashMap<String,Integer>();
for(String who: participant)
map.put(who, map.getOrDefault(who, 0)+1);
for(String who: completion)
map.put(who, map.get(who)-1);
Iterator <Map.Entry<String, Integer>> it = map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<String, Integer> entry = it.next();
if(entry.getValue()!=0) {
answer = entry.getKey();
break;
}
}
return answer;
}
}
'Algorithms > programmers' 카테고리의 다른 글
[Hash] 신고 결과 받기, 베스트앨범 (1) | 2024.03.08 |
---|---|
[Binary Search Tree] 길 찾기 게임 (0) | 2024.02.29 |
[이분탐색] 징검다리 건너기 (0) | 2024.01.23 |
[이분탐색] 프로그래머스 입국심사 (0) | 2024.01.11 |
[Greedy] 프로그래머스 체육복, 큰 수 만들기, 구명보트, 단속카메라 (1) | 2023.12.28 |