* 문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
* 제한사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
----------------------------------------
public String solution(String[] participant, String[] completion) {
// TODO Auto-generated method stub
String rtn_val = "";
ArrayList p1 = new ArrayList<>();
ArrayList c1 = new ArrayList<>();
for (int i =0 ; i<participant.length ; i++) {
p1.add(participant[i]);
if (i < participant.length-1) { //c1 이 1 개 작다
c1.add(completion[i]);
}
}
//p1.retainAll(c1); // p1 에서 c1과 겹치는 부분만 남기고 나머지 삭제
// p1 에서 c1 에 포함된 객체를 삭제한다
// for(int i= p1.size()-1; i >= 0; i--) {
// if(c1.contains(p1.get(i)))
// p1.remove(i);
// }
//rtn_val = p1.toString();
/*
[1] : [leo]
[2] : [vinko]
[3] : []
3번 경우 [3] : mislav 가 나와야 함
이 방식은 중복도 함께 지워버림
*/
// Arrays.sort(participant);
// Arrays.sort(completion);
//
// for (int i=0 ; i<completion.length ; i++) {
//
// if ( !(completion[i].equals(participant[i] ) ) ) {
// rtn_val = participant[i];
// break;
// }
//
// if ("".equals( rtn_val )) {
// rtn_val = participant[participant.length-1];
// }
// }
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) {
//hm.put(player, hm.get(player) + 1);
hm.put(player, hm.getOrDefault(player, 0) + 1);
}
for (String player : completion) {
hm.put(player, hm.get(player) - 1);
}
System.out.println(hm);
return rtn_val;
}
----------------------------------------
getOrDefault : key값이 없다면 입력시 설정한 default 값 반환
HashMap<String , String> map = new HashMap<String, String>();
String val = map.getOrDefault("key","val");
//HashMap 을 바로 생성하고 "key"라는 값을 바로 불러왔는데요.
// "key"로 저장된 값이 없기 때문에 디폴트로 "val"이라는 값이 val변수에 저장됩니다.
putIfAbsent : key 값이 없다면 입력된 key 와 value를 입력 , 해당 key 가 존재하면 입력되었던 값 반환
HashMap<String , String> map = new HashMap<String, String>();
map.putIfAbsent("key","val");
// 위의 코드는 null을 반환합니다.
// 다시 putIfAbsent()를 사용하면
map.putIfAbsent("key","val_new");
//이때는 이전에 입력한 "val"이 반환되고 다시 "key" 값의 밸류값은 "val_new"로 변경됩니다.
//이후에 "key"에대한 값은 "val_new"됩니다.
----------------------------------------
----------------------------------------
(인터넷 검색/펌 포함)
sort, hm
[1]
참여자명단과 완주자명단 비교
-> hashtable ht 에 key 와 cnt 를 넣을 의도
동명이인 처리
-> 참가자를 (중첩)루핑 돌면서 동일인 : cnt=2 로
-> ht 가 > 0 이상이면 동일인 이 있다고 판단
완주자 명단 검사 -> cnt 가 안 맞으면 이게 정답
그 다음은 루핑 돌면서 검사
참여자 명단에 있는데 완주자 명단에 없으면 이게 정답
--------------------------------------------------
[2]
참여자명단과 완주자명단 -> sort 함
완주자 명단이 하나 적음
참여자 명단으로 for loop (참여자 명단의 마지막-1 까지만 루핑)
-> 다른 경우 정답
모두 동일한 경우 마지막이 정답
??
완주자로 for loop 돌아도 될 듯
--------------------------------------------------
[3]
1번이랑 비슷
참여자명단 loop 돌아 hm 에 key (이름) , value(1) 을 넣는다
완주자명단 돌면서 -1 해준다
마지막으로 hm loop 돌면서
value 가 1인거 찾는다
--------------------------------------------------
[4]
2번이랑 비슷
완주자로 for loop 돌아도 될 듯 -> 실제로 해봄
'프로그래밍언어' 카테고리의 다른 글
K번째수 (0) | 2019.08.30 |
---|---|
체육복 (0) | 2019.08.30 |
모의고사 (0) | 2019.08.30 |
HashMap 처리 (0) | 2019.07.29 |
Arrays.asList() - 사용 시 주의 (0) | 2019.07.29 |