Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Til
- join
- 코틀린
- 기술면접
- SQL
- 안드로이드스튜디오
- Android
- 티스토리챌린지
- select
- MySQL
- 혼공파
- doitandroid
- 코테
- 프로그래머스
- Kotlin
- 혼공단
- groupby
- 정보처리기사
- 스터디
- 정처기
- 인프런
- 카카오코테
- 안드로이드
- 자료구조
- java
- 오블완
- CS
- 알고리즘
- 혼공챌린지
- 자바
Archives
- Today
- Total
Welcome! Everything is fine.
[프로그래머스/Lv.1] 완주하지 못한 선수 - Java 본문
728x90
📌 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

📌 풀이
참가자 명단에는 있으나 완주자 명단에는 없는 선수의 이름을 반환하는 문제이다. 주의할 점은 참가자 중에 동명이인이 있을 수 있다는 점이다. 내가 작성한 풀이의 대략적인 흐름은 다음과 같다.
- 참가자 배열을 돌며 HashMap에 <참가자 이름, 인원 수> 형태로 참가자들의 정보를 저장한다.
- 완주자 배열을 돌며 HashMap에 저장된 key와 같은 이름이 나올 경우
- 해당 이름이 1개인 경우, 해당 이름으로 된 key를 삭제한다.
- 해당 이름이 2개 이상인 경우(동명이인이 있을 경우), 해당 이름의 인원수를 1 감소시킨다.
- 위 과정을 거치면 완주자 명단에 없는 이름이 남기 때문에 해당 key를 answer에 대입한 후 반환한다.
아래와 같은 과정에서 보통은 map.containsKey()를 사용했었는데, 이제는 getOrDefault() 메서드를 알게 되어 사용해보았다. 해당 key에 대한 value가 없을 경우 기본값으로 0을 넣어준다.
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < participant.length; i++) {
String key = participant[i];
map.put(key, map.getOrDefault(key, 0) + 1);
}
그리고나서 completion 배열을 돌며 해당 map에 완주자가 있다면 지운다. 단, 동명이인이 있을 경우 인원 수를 1 감소시킨다.
for (int i = 0; i < completion.length; i++) {
if (map.containsKey(completion[i])) {
if (map.get(completion[i]) == 1) map.remove(completion[i]);
else map.replace(completion[i],map.get(completion[i]) - 1);
}
}
남은 keyfmf answer에 넣어준 후 반환한다.
for (String key : map.keySet()) {
answer = key;
}
📌 전체코드
다른 사람들의 코드를 보니 해시 말고도 주어진 배열을 정렬한 후 푸는 방법도 있었다. 여러가지 방법을 시도해보고 자신에게 맞는 방법으로 풀면 될 것 같다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < participant.length; i++) {
String key = participant[i];
map.put(key, map.getOrDefault(key, 0) + 1);
}
for (int i = 0; i < completion.length; i++) {
if (map.containsKey(completion[i])) {
if (map.get(completion[i]) == 1) map.remove(completion[i]);
else map.replace(completion[i],map.get(completion[i]) - 1);
}
}
for (String key : map.keySet()) {
answer = key;
}
return answer;
}
}
'프로그래머스 > Lv.1' 카테고리의 다른 글
[프로그래머스/Lv.1] 문자열 나누기 - Java (0) | 2024.05.06 |
---|---|
[프로그래머스/Lv.1] 다트 게임(2018 KAKAO BLIND RECRUITMENT) - Java (0) | 2024.04.29 |
[프로그래머스/Lv.1] 둘만의 암호 - Java (0) | 2024.04.29 |
[프로그래머스/Lv.1] 숫자 짝꿍 - Java (0) | 2024.04.27 |
[프로그래머스/Lv.1] 옹알이(2) - Java (0) | 2024.04.27 |