728x90
문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
내 코드
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
for(int i = 0; i < participant.length; i++) {
boolean flag = false;
for(int j = 0; j < completion.length; j++) {
if(participant[i].equals(completion[j])) {
completion[j] = null;
flag = true;
break;
}
}
if(!flag) {
answer += participant[i];
}
}
return answer;
}
}
뭔가 이렇게 하면 안될거 같은데 하면서도(효율성이 엄청 떨어지는 것 같은데) 다른 방법이 전혀 떠오르지 않았다.
다른 사람 코드
1. Arrays.sort(); 메소드를 사용하는 방법.
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];
}
}
전혀 생각하지 못했다. for문에서 빠져나오는게 확실히 빠를 수 밖에 없음.
2. 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;
}
}
공부 뒤 내용 추가
http://tech.javacafe.io/2018/12/03/HashMap/
백준 알고리즘도 좋지만 프로그래머스는 처음 풀어봤는데 지금 계속 백준 dp 풀어서 그런지 문제가 새로운거 같고 채점방식도 더 마음에 들고 .. 일단 병행하면서 할 것
300x250
'알고리즘' 카테고리의 다른 글
백준 알고리즘 공부 9465번 자바 (0) | 2020.03.27 |
---|---|
[200324/D-8] 백준 알고리즘 공부 (0) | 2020.03.24 |
[200320/D-7] 백준 알고리즘 공부 (0) | 2020.03.20 |
[200319/D-6] 백준 알고리즘 공부 (0) | 2020.03.20 |
[200318/D-5] 백준 알고리즘 공부 (0) | 2020.03.18 |
댓글