[문제]

제한 사항
- 1<= 경기에 참여한 선수의 수 <=100,000
- completion의 길이는 participant의 길이보다 1 작음
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자
- 동명이인 있을수 있음
[알고리즘]
participant 배열과 completion 배열의 관계를 잘 생각하면 쉽게 답이 나오는 문제입니다.
participant 배열에는 모든 참가자의 이름이, completion 배열에는 완주한 참가자의 이름이 들어가 있는데,
제한 사항 중 "completion의 길이는 participant의 길이보다 1 작음 "을 떠올리면 "완주하지 못한 선수는 항상 1명"입니다.
따라서, participant과 completion 두 배열 모두 정렬한뒤 일치하지 않는 인덱스의 선수 이름을 리턴해주면 되는 문제.
정렬은 sort() 메소드를 사용해주면 됩니다.
ex) Arrays.sort(arr) = 오름차순 / Arrays.sort(arr,Collections.reverseOrder()) = 내림차순
굳이 해시를 쓰지 않아도 되는 문제입니다.
[코드]
sort 사용한 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer="";
Arrays.sort(participant);
Arrays.sort(completion);
int i =0;
for(i=0;i<completion.length;i++)
{
if(!participant[i].equals(completion[i])){
return participant[i];
}
}
return participant[i];
}
}
아래는 다른 사람의 풀이인데 HashMap을 사용하여 풀이하였습니다 , 몰랐던 메소드를 사용해서 이 코드도 작성합니다.
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;
}
}
해시맵 "hm"을 생성하여 participant의 참가자를 key 값으로 , value는 +1 을 넣어줍니다.
그리고 이 HashMap의 key 값에 completion의 명단이 존재하면 value값에 -1을 해주고,
key값의 value값이 0이 아닌 경우 key 값을 answer로 넣어주어 완주하지 못한 명단을 구할 수 있습니다.
* getOrDefault() = 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
'Coding Test > Programmers' 카테고리의 다른 글
| [JAVA] 완전탐색 Lv.1 / 모의고사 (0) | 2021.05.02 |
|---|---|
| [JAVA] Heap Lv.1 / 더 맵게 (0) | 2021.04.26 |
| [JAVA] 정렬 Lv.1 / K번째 수 (0) | 2021.04.26 |
| [JAVA] 스택/큐 Lv.2 / 다리를 지나는 트럭 (0) | 2021.04.20 |
| 프로그래머스 시작 (0) | 2021.04.05 |