티스토리 뷰
문제 설명
- 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
- 마라톤에 참여한 선수들의 이름이 담긴 배열
participant
와 완주한 선수들의 이름이 담긴 배열completion
이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록solution
함수를 작성해주세요.
제한 사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
입출력 예
입출력 예 설명
예제 #1
- leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #2
- vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
예제 #3
- mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
문제 풀이
나의 풀이
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> containList = new HashMap<String, Integer>();
for (String s : participant) {
if (containList.containsKey(s)) {
containList.put(s, containList.get(s).intValue() + 1);
} else {
containList.put(s, 1);
}
}
for (String s : completion) {
int a = containList.get(s);
if (a == 1) {
containList.remove(s);
} else {
containList.put(s, containList.get(s) - 1);
}
}
return new ArrayList<String>(containList.keySet()).get(0);
}
}
보완한 나의 풀이
public String solution(String[] participant, String[] completion) {
Map<String, Integer> containList = new HashMap<>();
for (String s : participant) {
containList.compute(s, (key, value) -> value == null ? 1 : ++value);
}
for (String s : completion) {
containList.compute(s, (key, value) -> value == 1 ? null : --value);
}
return containList.keySet().iterator().next();
}
Map
의compute
메서드 사용법을 알게 되었다.- 써보니 정말 편하다. 진짜 정말 편하다.. 표현이 안되네
인상적인 답안
public static String solution(String[] participant, String[] completion) {
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < participant.length; i++) {
map.compute(participant[i], (k, v) -> v != null ? null : 1);
if (i < completion.length) {
map.compute(completion[i], (k, v) -> v != null ? null : 1);
}
}
return map.keySet().iterator().next();
}
- 동명이인이 있어도 이름이
participant
와completion
존재하는 수가 홀수일때 완주를 못한 선수로 간주를 했다. - 그렇기 때문에
participant
에 있든completion
에 있든map
에 이미 있는 이름이라면 없애는 식의 계산을 한다. - 정말 심플하다.
참고
끝으로
이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
반응형
'프로그래밍 > Algorithm' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 (0) | 2020.03.07 |
---|---|
[알고리즘] 두 단어로의 약어(initials) 구하기 (0) | 2019.11.07 |
[알고리즘] Java 자연수의 조합(경우의 수) 구하기 (0) | 2019.11.07 |
(알고리즘) 자연수 범위중 팰린드롬(palindrome)개수 구하기 (0) | 2019.11.07 |
[algorithm] 선택 정렬(Selection Sort) (0) | 2016.12.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- git
- 텐트
- TableView
- JavaFX Window Close
- 이펙티브 자바
- 일본 배낭여행
- JavaFX Table View
- windows
- 일본 여행
- JavaFX 테이블뷰
- effective java
- Java UI
- JavaFX
- 자전거
- 배낭여행
- 일본 자전거 여행
- 이펙티브
- intelij
- 인텔리제이
- effectivejava
- 자바
- 배낭 여행
- 자전거 여행
- 일본여행
- 방통대 과제물
- 이펙티브자바
- JavaFX 종료
- springboot
- 스프링부트
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함