[JAVA] programmers - 완주하지 못한 선수
방법 1. Arrays.sort() 이용하기
import java.util.Arrays;
public class Solution_1 {
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];
}
}
먼저 완주자(completion)와 참여자(participant) 배열을 Arrays.sort() 함수로 정렬해준뒤
반복문을 돌려서 완주자와 참여자 배열에서 같지 않을 경우 뱉어낸다.
이 때 중요한건 i는 전역변수 !!!
반복문을 전부 돌기전에 같지 않은 문자열이 있으면 그대로 뱉어내면 되지만
돌기전에 없을 경우 (완주하지 못한 선수가 마지막 순서에 있을 경우)
ex ) [leo, kiki, eden].sort() => [eden, kiki, leo]
[eden, kiki].sort() => [eden, kiki]
for문을 다 돌면 i = 2
participant[2] 는 마지막에 남은 leo
방법2. HashMap 이용하기
import java.util.HashMap;
public class Main_2 {
public static void main(String[] args) {
Solution s = new Solution();
String[] participant = {"leo", "kiki", "eden", "leo"};
String[] completion = {"eden", "kiki", "leo"};
System.out.println(s.solution(participant, completion));
}
public static class Solution {
public String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
String looser = "";
for(String p : participant) {
map.put(p, map.getOrDefault(p, 0) + 1);
}
for(String p : completion) {
map.put(p, map.get(p) -1);
}
for(String p : map.keySet()) {
if(map.get(p) != 0) {
looser = p;
}
}
// for(String p : completion) {
// if(map.get(p) != 0) {
// looser = p;
// }
// }
return looser;
}
}
}
1. 반복문을 돌려 해시맵에 참가자 전원을 key값으로 ,
map.getOrDefault()를 사용하여(해당 key값이 이미 존재할 경우 다른 value로 바꿔주는 함수)
value 값을 넣어준다.
그러면 현재 map에 담겨져 있는 key와 value 값은
이렇게 된다.
2. 다시 반복문을 돌려 해시맵에 완주자 전원을 key 값으로,
맵에서 가져온 원래 value 에서 - 1을 뺀 값을 value 값으로 넣어준다.
현재까지 map에 담겨져 있는 key와 value 값은
3. 위의 맵에서 keySet()함수를 사용하여 key값들을 가져온 뒤
또 다시 반복문을 돌려서 해당 key 값의 value를 체크한다.
value가 0이면 완주자 , 0이 아니면 완주하지 못한 선수 <<