https://school.programmers.co.kr/learn/courses/30/lessons/42576
풀이
처음에는 Array의 기본 내장 정렬을 이용하여 풀었다.
두 번째 방법으로는 기본 문제 카테고리와 같은 HashMap을 사용하여 풀었다.
중간에 주의할 점은 코드에 주석으로 달아놓았다. 역시 Hash가 엄청나게 빠르다.
코드
HashMap 사용한 풀이
package Hash;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Solution_42576 {
public static void main(String[] args) {
// String[] participant = {"leo", "kiki", "eden"};
// String[] completion = {"eden", "kiki"};
String[] participant = {"marina", "josipa", "nikola", "vinko", "filipa"};
String[] completion = {"josipa", "filipa", "marina", "nikola"};
System.out.println(solution(participant,completion));
}
public static String solution(String[] participant, String[] completion) {
String answer = "";
StringBuilder sb = new StringBuilder();
/* HashMap 사용 */
// HashMap<String,Boolean> player = new HashMap<>(); // 동명이인이 있기 때문에 Boolean으로 false->true로 하는 방식은 불가능
HashMap<String,Integer> player = new HashMap<>();
for (int i = 0; i < participant.length; i++) {
// getOrDefault: 지정된 키의 값을 반환하는데 키를 못찾으면, 기본 값으로 지정된 객체를 반환.
player.put(participant[i], player.getOrDefault(participant[i],0)+1);
}
for (int i = 0; i < completion.length; i++) {
player.put(completion[i],player.getOrDefault(completion[i],0)-1);
}
// 완주했다면 +1-1=0으로 0의 값을 가지게 될테고, 완주하지 못했다면 +1의 값을, 동명이인이 있는데 완주하지 못했다면 +1+1-1=+1이 될테니
// 여러명이든지 한명이든지 간에 완주한사람:0의 value, 완주하지 못한 사람: 1의 value를 가지게 될 것임.
for (Map.Entry<String,Integer> p:player.entrySet()) {
if(p.getValue() == 1) sb.append(p.getKey());
}
answer = sb.toString();
return answer;
}
}
내장 정렬 함수 사용 풀이
package Hash;
import java.util.Arrays;
public class Solution_42576 {
public static void main(String[] args) {
// String[] participant = {"leo", "kiki", "eden"};
// String[] completion = {"eden", "kiki"};
String[] participant = {"marina", "josipa", "nikola", "vinko", "filipa"};
String[] completion = {"josipa", "filipa", "marina", "nikola"};
System.out.println(solution(participant,completion));
}
public static String solution(String[] participant, String[] completion) {
String answer = "";
StringBuilder sb = new StringBuilder();
// Array로 해결하기 -> 정렬 후 다르면 출력하고 끝내기.
Arrays.sort(participant);
Arrays.sort(completion);
for (int i = 0; i < completion.length; i++) {
if(participant[i].equals(completion[i])){ //if(participant[i]!=completion[i]){
sb.append(participant[i]);
break;
}
}
if(sb.length()==0){ // 정렬했을 때 맨 마지막 선수만 다르다면
sb.append(participant[participant.length-1]);
}
answer = sb.toString();
return answer;
}
}
참고
정렬인데, 더 깔끔한 풀이 wow
import java.util.*;
class Solution {
public 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];
}
}
'공부 > 알고리즘' 카테고리의 다른 글
[백준]1916_최소비용 구하기_다익스트라 인접행렬, 인접리스트 Java풀이 + 반례 (0) | 2023.02.08 |
---|---|
[백준]17413_단어 뒤집기 2_Java 풀이 (0) | 2023.02.04 |
[백준]1018_체스판 다시 칠하기_Java 풀이 (1) | 2023.01.24 |
[백준]2751_수 정렬하기2_Java풀이(Collections.sort, Counting Sort) (0) | 2023.01.10 |
[프로그래머스]43162_네트워크_JAVA 풀이_DFS (0) | 2022.11.30 |
댓글