티스토리 뷰
💡 나의 풀이
Hash를 사용하지 않았을 때 나의 풀이 (Hash를 사용한 코드보다 시간복잡도 큼)
처음에 HashMap을 썼다가 사용이 미숙하여 패스..List 썼다가 이중 for문 썼다가 난리ㅠ
저번 스터디 때 친구가 Arrays.sort로 정렬한 뒤 완주한 선수 지워나가는 것에서 힌트를 얻어서 풀었다.
participant와 completion이 정렬되어 있기 때문에 계속 비교해서 값이 같지 않은 것이 나왔을 때
participant[i]를 return하면 완주하지 못한 선수가 나온다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
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];
}
}
💡 hash를 이용한 다른 사람의 풀이
getOrDefault() -> 찾는 키가 존재하면 해당 키의 값을 반환하고, 없으면 기본값을 반환함.
hash.getOrDefault(arg라는 키, arg키가 존재하면 해당 값/없으면 0) 그리고 +1
완주한 선수 completion을 map에 추가할 때 1씩 빼주고, 해당하는 키 값이 0이 아닐 때 완주하지 못한 선수이므로
해당 key를 return하여 출력
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> hash = new HashMap<>();
for (String arg : participant){
hash.put(arg, hash.getOrDefault(arg, 0) + 1);
}
for (String arg : completion){
hash.put(arg, hash.get(arg) - 1);
}
for (String key : hash.keySet()) {
if (hash.get(key) != 0){
return key;
}
}
return null;
}
}
'👩🏻💻 기술면접 > 알고리즘' 카테고리의 다른 글
[프로그래머스] JAVA K번째 수 Level 1. (0) | 2020.05.16 |
---|---|
[프로그래머스] JAVA 비밀지도(카카오 블라인드) Level 1. (0) | 2020.04.15 |
[프로그래머스] JAVA 행렬의 덧셈 Level 1. (0) | 2020.04.15 |
[프로그래머스] JAVA 소수 찾기 Level 1 (3) | 2020.04.07 |
[프로그래머스] Java 문자열 내 마음대로 정렬하기 Level 1 (0) | 2020.04.03 |
댓글