https://programmers.co.kr/learn/courses/30/lessons/42576
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
해시를 사용해야 하는 문제 같지만 어려워서 그냥 풀었다.
정렬을 사용하면 성능이 좋지 않을 것 같기에 해시를 이용하는 법을 익혀야 할 것 같다.
그래서 해시로 푸는 법도 확인해보려고 한다.
[이클립스 코드]
import java.util.Arrays;
public class Main {
public static String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int i;
for(i=0; i<completion.length; i++) {
if(!participant[i].equals(completion[i])) {
return participant[i];
}
}
return participant[i];
}
public static void main(String args[]){
String[] participant = {"marina", "josipa", "nikola", "vinko", "filipa"};
String[] completion = {"josipa", "filipa", "marina", "nikola"};
System.out.println(solution(participant, completion));
}
}
프로그래머스에서 좋아요를 가장 많이 받은 분의 코드이다.
import java.util.HashMap;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
return answer;
}
}
getOrDefault(key, defaultValue): map에서 찾는 Key가 없다면 defaultValue를 리턴
// participant 배열의 모든 값을 해시 맵에 넣음
for (String player : participant)
// key = player, value = 현재 맵에 저장된 문자열 개수 +1
hm.put(player, hm.getOrDefault(player, 0) + 1);
// completion 배열의 모든 값을 해시 맵에 넣음
for (String player : completion)
// 맵에 있는 같은 문자열을 찾아서 value 값 -1
hm.put(player, hm.get(player) - 1);
https://codevang.tistory.com/289 읽어보니 아래 부분을 수정할 필요가 있다고 한다.
Key 값만 Set으로 가져오는게 아니라 Entry 객체 자체를 Set으로 가져오도록.
entrySet() : 엔트리 객체로 이루어진 Set을 리턴
이렇게 하면 더 이상 해시 맵에서 데이터를 찾을 필요 없이 순서대로 value 값을 확인하면 된다.
// 수정 전
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
// 수정 후
for (Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() > 0) {
answer = entry.getKey();
break;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]탐욕법>체육복 Java (0) | 2021.06.28 |
---|---|
[프로그래머스]연습문제>가운데 글자 가져오기 Java (0) | 2021.06.27 |
[프로그래머스]연습문제>직사각형 별찍기 Java (0) | 2021.06.27 |
[프로그래머스]정렬>K번째수 Java (0) | 2021.06.27 |
[프로그래머스]2020 카카오 인턴십 > 키패드 누르기 Java (0) | 2021.06.26 |