https://programmers.co.kr/learn/courses/30/lessons/42576
진짜 고민 많이한 문제인데, 결국 풀지는 못했다.
처음에는 Stream의 anyMatch로 했는데, 동명이인 문제를 해결하지 못했다.
그다음에 찾은게 List로 변환하여 removeAll하는 방식이었는데, 이역시 동명이인 문제를 해결하지 못했고, 변환을 꼭 해야한다는 문제가 있었다.
그 다음으로 생각한게 오름차순으로 동일하게 배열해주는 방식이었다.
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < participant.length-1; i++) {
if(!participant[i].equals(completion[i])) {
answer = participant[i];
}
}
//위에서 찾지 못했다면, participant의 가장 마지막 값일 것
if (answer.length() == 0) answer = participant[participant.length-1];
return answer;
}
}
이 방식으로 코드실행>테스트는 통과했는데, 제출 후 채점하기에서 대부분 틀려서 해결하지 못했다.
다른 정답코드를 보고 일부 수정을 했다.
마지막 if에서 answer.length() == 0 이부분 가정이 틀린 것 같은데 다른 방법을 찾지 못했다.
문제 원인 찾았다...! →
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < completion.length; i++) {
if (!participant[i].equals(completion[i])) {
answer = participant[i];
return answer;
}
}
//위에서 찾지 못했다면, participant의 가장 마지막 값일 것
return participant[participant.length-1];
}
}
타입에 따라 사용하는 메소드가 너무 달라서 햇갈리는 부분이 많다.
이 문제는 해시 문제로 분류되어, 해시도 추가로 공부해야할 것 같다.
다른사람 답안 : HashMap
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;
}
}
'Language > JAVA' 카테고리의 다른 글
[프로그래머스] 자릿수 더하기 + Stream참고자료 (0) | 2022.01.18 |
---|---|
[프로그래머스] 이상한 문자 만들기 (0) | 2022.01.17 |
[프로그래머스] 수박수박수박수박수박수? (0) | 2022.01.17 |
[프로그래머스] 서울에서 김서방 찾기 (0) | 2022.01.17 |
[프로그래머스] 문자열 다루기 기본 (0) | 2022.01.17 |