일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- post
- 변수
- 리액트
- 백준1654번js
- 컴퓨터공학
- 좋아요추가
- 깃허브
- var와let과const차이
- 오픈소스
- API
- gui
- 리팩토링
- 깃
- js
- 프로그래머스
- 자바
- 객체
- 파이프라인
- 브랜치
- Node.js
- 타입스크립트
- 백준13549번js
- 자바스크립트
- 웹
- CS
- Express
- 백준13549번
- npm
- 데이터베이스
- 예외처리
- Today
- Total
Nevertheless
[JAVA] 완주하지 못한 선수 본문
< 내 풀이 >
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
String answer="";
for(int i=0;i<completion.length;i++){
if(!completion[i].equals(participant[i])){
answer+=participant[i];
break;
}
}
if(answer.equals(""))
answer+=participant[participant.length-1];
return answer;
}
}
✏️ 풀이 방법
1. 참가자와 완주자를 알파벳 순으로 정렬한다.
2. 정렬을 하고 난 후의 참가자와 완주자의 이름이 다르면 answer에 해당 참가자 이름을 추가한 후, break
ex) participant={"mislav", "stanko", "mislav", "ana"} , completion={"stanko", "ana", "mislav"} 일 때
정렬 후에는 participant={ "ana" , "mislav", "mislav" ,"stanko"} , completion={ "ana" , "mislav" ,"stanko"} 가 된다. 완주하지 못한 선수는 딱 1명 이므로 completion의 배열을 돌며 둘의 값을 비교했을때 [2] 번째 값이 다름을 확인할 수 있다. 그러므로 완주하지 못한 선수는 mislav 이다.
3. 만약 answer에 추가된 값이 없으면 참가자 배열의 맨 마지막 값이 완주하지 못한 선수이다.
: 추가된 값이 없다 => 완주자 배열의 길이만큼 돌 때의 값이 참가자 배열의 값과 같았다. 완주자 배열의 길이는 참가자 배열의 길이보다 1 작으므로 참가자 배열의 마지막 값이 완주하지 못한 선수이다.
< 다른 사람의 풀이 >
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;
}
}
➡️ 해시맵에서 하용하는 get과 getOrDefault의 차이점을 알고 싶어서 찾아봤는데, get( ) 메서드는 요청된 키 값을 찾을 수 없는 경우 "null"이 반환되고, getOrDefault( ) 메서드는 키와 연결된 값이 있을 경우 해당 값이 반환되고, 해당 키 값이 없으면 매개변수로 전달된 defaultValue가 반환된다. 위 풀이의 hm.getOrDefault(player, 0) 에서 0이 기본값이다.
✍🏻 느낀점
이 문제는 처음에 어떻게 풀까 고민을 하다가 결국 힌트를 보고 나서야 풀었다. 어려운 문제는 아니지만 조금의 아이디어가 필요한 것 같다. 문제가 해시로 분류되어 있기 때문에 위의 풀이처럼 해시맵을 이용해서 푸는게 좀 더 출제 의도에 맞지 않나 싶다. 해시맵에 어느 정도 익숙해졌다고 생각했는데, 이러한 문제를 보고는 바로 안떠오르는 것 같다. 이번 문제로 getOrDefault ( ) 메서드에 대해서도 배웠으니 다음에는 잘 활용해봐야겠다.
참고 블로그
https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C // getOrDefault 에 대하여
https://codegym.cc/ko/groups/posts/ko.610.javaui-hashmap-getordefault-mesodeu // getOrDefault 에 대하여 2
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 이웃한 칸 (1) | 2024.06.10 |
---|---|
[JAVA] 숫자 짝꿍 (0) | 2024.06.08 |
[JAVA] 크레인 인형 뽑기 게임 (0) | 2024.06.01 |
[JAVA] 성격 유형 검사하기 (0) | 2024.06.01 |
[JAVA] 바탕화면 정리 (0) | 2024.05.27 |