Arrays.sort(participant), Arrays.sort(completion)!participant[i].equals(completion[i])인 인덱스를 찾는다participant[i]를 return해준다import java.util.Arrays;
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])) {
break;
}
}
return participant[i];
}
}
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;
}
}
다른 사람 풀이를 보니 정석은 HashMap을 이용해서 푸는 것이었다고 한다.
hm.getOrDefault(key, DefaultValue)를 사용한 이유는 동명이인을 중복 체크하기 위해서이다.
hm.getOrDefault(key, DefaultValue)
찾는 key가 존재한다면 key의 value를 반환하고, 없다면 DefaultValue 반환
hm.put(player, 1)을 사용했다면 동명이인이 나왔을 때, 기존 key에 새로운 value를 줘서 동명이인이이 있더라도 value가 계속 1이 나오게 된다.
예시
participant - A C B A D
completion - B A C A
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) {
hm.put(player, hm.getOrDefault(player, 0) + 1);
}
key value
A 2
C 1
B 1
D 1
HashMap<String, Integer> hm = new HashMap<>();
for (String player : completion) {
hm.put(player, hm.get(player) - 1);
}
key value
A 0
C 0
B 0
D 1
완주하지 못한 key값 "D"만 value에 1이 남게 된다.
Map의 일종으로 key와 두개의 value로 이루어진 데이터를 보관한다.
Map - key:value 구조(key는 중복X, value는 중복 가능)
사용법
import java.util.HashMap;
public class HashMap {
public static void main(String[] args) {
// 해시맵 선언 - HashMap<타입, 타입> 변수 = new HashMap<타입, 타입>()
HashMap<String, String> hm = new HashMap<String, String>();
// 값 추가
hm.put("1", "First");
hm.put("2", "Second");
System.out.println(hm)
// 결과값 - {1=First, 2=Second}
// 값 삭제
hm.remove("1");
System.out.println(hm)
// 결과값 - {2=Second}
// 값 출력하기
for (Map.Entry<String, String> e : hm.entrySet()) {
System.out.prinln(e.getKey(), e.getValue());
}
// 결과값 - 2, Second
}
}