일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준피보나치수
- 카카오코딩연습
- 프로그래머스
- 프로그래머스해쉬
- 프로그래머스자바
- 백준팩토리얼자바
- 코딩연습
- 백준피보나치
- 알고리즘
- 알고리즘공부
- 프로그래머스완주하지못한선수
- intelliJ단축키
- java
- 자바
- 인텔리제이테스트클래스생성
- 스프링부트와 AWS로혼자구현하는웹서비스
- dfs
- springboot
- 인텔리제이단축키
- 백준하노이탑
- 전화번호목록자바
- 백준
- 테스트클래스생성단축키
- 백준벌집
- 프로그래머스전화번호목록
- 프로그래머스JAVA
- 백준팩토리얼
- C++
- 프로그래머스N으로표현
- 완전탐색
- Today
- Total
말랑말랑
[프로그래머스] 완주하지 못한 선수 본문
[21-04-05]
프로그래머스의 문제를 한번에 이해할 만한 독해 능력을 키워야겠다
게다가 오늘 한건 개인적으로 많이 부족하게 느껴져서
더 열심히 더 많이 풀어봐야겠다는 생각이 들었다ㅠ
문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
participant | completion | return |
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
풀이
import java.util.HashMap;
import java.util.Arrays;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant); // 참여
Arrays.sort(completion); // 완주
for(int i=0 ; i<participant.length-1 ; i++) {
if(participant[i].equals(completion[i]) == false) { // 순서가 같지 않은 순간 완주 안한 애가 있는것.
answer = participant[i];
break;
}
}
if(answer.equals("")) { // 순회를 했는데도 비어있으면
answer = participant[participant.length-1];
}
return answer;
}
}
일단 해쉬 카테고리에 해당하는 문제지만 해쉬를 사용해서 풀진 못했다....😂
대신 participant(참여자)와 completion(완주자)의 배열의 갯수가 1개밖에 차이가 나지 않는다는 걸 보고
정렬한 뒤 이름이 같지 않은 순간을 잡아내면 될거라고 생각했다.
하나를 제외하고 나머지는 participant(참여자), completion(완주자) 배열의 모든 원소가 동일할 것이기 때문!
completion(완주자)에 없는 이름 하나만 찾아내면 되는 문제라 해쉬 사용을 포기하고 방향을 트니
고민하던 시간이 무색하게 코드는 금방 완성 됐다.
새로 알게 된 점
해쉬를 꼭꼭 쓰고 싶었지만 풀릴듯 안풀릴듯 테스트케이스에 통과하지 못했기에, 다른 짱짱맨들의 코드를 보고 싶었다.
그러다 새로 알게된 함수!!!
getOrDefault( key, DefaultValue)
해당 맵에 인자로 받은 key가 존재하지 않으면 DefaultValue를 반환하고
key가 맵에 존재한다면 존재하는 key에 해당하는 value를 반환한다.
Map 계열 컬랙션에서 사용 가능한 함수인듯
hm.getOrDefault(player, 0) + 1);
어찌저찌 풀긴 풀었으나 코드 정리하는 과정과 해쉬를 써야 한다는 강박에 생각보다 오래걸리긴 했다.
해쉬계열 컬렉션을 써본지 오래되서 그런가 뭔가 풀릴듯 안풀리며 테스트 케이스도 자꾸 두어개를 통과 못해서ㅠ
결국 해쉬도 패스 하고 단순하게 풀었찌만 새삼 부족함이 크게 느껴졌다😥😥
앞으로 더 열심히 공부 해야지😵‼
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 여행경로 (0) | 2021.06.04 |
---|---|
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2021.04.07 |
[프로그래머스] 크레인 인형뽑기 (0) | 2020.09.21 |
[프로그래머스] 시저 암호 (0) | 2020.09.21 |
[프로그래머스] K번째 수 (0) | 2020.09.21 |