친구가 쿠팡에 지원했는데 코딩테스트가 잡혔다고 연습을 한다고 해서
친구가 푸는 문제들을 전달받아 프로그래머스에서 도전해보게되었다
단계별 문제가 나와있고 나도 알려준 문제들을 순차적으로 풀어보기로 했다
1. 문제는 programmers.co.kr/learn/courses/30/lessons/42576
문자열 배열로 참가자와 완주자가 주어지고, 완주하지 못한 선수를 찾는 문제이다
첫번째 단계라 쉬워보였지만, 막상 풀어보니 정확하게 풀수는 있지만 효율성 점수를 통과하기가 어려웠다
2. 나의 코드
1) 이중포문으로 도착과 출발을 비교하여 배열에서 삭제 후 출력
- 정확성에서는 통과했지만, 효율성을 통과하지 못함
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
for (int i = 0; i < completion.length; i++) {
for (int j = 0; j < participant.length; j++) {
if (participant[j].equals(completion[i])) {
completion[i] = "";
participant[j] = "";
}
}
}
for(int i = 0 ; i< participant.length; i++){
if(participant[i] != ""){
answer = participant[i];
break;
}
}
return answer;
}
}
2) 해시 문제라고 하여 HashMap을 이용하여 참가자를 넣다, 완주자를 빼는 것으로 변경해서 구현
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> mems = new HashMap<>();
for (int i = 0; i < participant.length; i++) {
mems.put(participant[i], mems.getOrDefault(participant[i], 0) + 1);
}
for (int i = 0; i < completion.length; i++) {
mems.put(completion[i], mems.getOrDefault(completion[i], 0) - 1);
}
for(String key : mems.keySet()){
if(mems.get(key) != 0){
answer = key;
break;
}
}
return answer;
}
}
이렇게 풀면 생각보다 간단하다
해시는 Key-Value를 쌍으로 데이터를 저장하는 자료 구조로
getOrDefault 메소드가 유용한것 같으니 기억해두도록 한다
'메모 > 알고리즘의 뇌' 카테고리의 다른 글
[알고리즘문제풀이/JAVA]#4 정렬: K번째수 (0) | 2021.06.25 |
---|---|
[알고리즘문제풀이/JAVA]#3 위장 (작성중) (0) | 2021.06.25 |
[알고리즘문제풀이/JAVA]#2 전화번호 목록 (0) | 2021.06.25 |