| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- imeOptions
- java
- val
- 프로그래머스
- BuildConfig
- 최단경로
- EditText
- 스카이라인 쉬운거
- 2501
- 순수함수
- hilt
- BFS
- 순열
- 자바
- Parcelize
- 약수 구하기
- 백준 퇴사
- EditorInfo
- 시뮬레이션
- 지능형 기차2
- 오르막수
- Android
- SWEA
- Parcelable
- Kotlin
- 백준
- 백준 14501
- dfs
- 조합
- 완전탐색
- Today
- Total
안드 공부를 해볼까?
[Java] 프로그래머스 완주하지 못한 선수 본문
1. 문제분석

문제가 너무 쉽다. 단순히 두 배열을 비교해서 완주하지 못한 선수를 return해주면 된다.
participant와 completion을 정렬하고 다른 데이터 한개만 쏙 빼면 되겠지만 이 문제의 카테고리가 "해시"이기 때문에 해시로 풀어보자.
HashMap은 Key와 Value로 이루어진 자료구조이다.
Key는 중복될 수 없고 한가지만 가질 수 있다. 만약 중복된 값이 들어온다면 새로 들어온 순으로 업데이트 된다.
Value는 중복이 가능하다. HashMap은 Key - Value 쌍으로 데이터를 쉽게 찾기 위해 사용된다.
먼저 HashMap을 어떻게 선언해야할지 보자. 우리가 독립적으로 한가지만 가지는 것은 배열 속 데이터다.
그렇다면 중복이 안되는 Key를 participant의 데이터인 String, Value는 중복감지를 위한 Integer를 선언해주면 된다.
만약 중복된 데이터가 들어온다면 Value값을 변경해주면 되고 우리는 변하지 않는 값을 찾아주면 된다.
2. 구현
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer>map = new HashMap<>();
for(String name : participant){
//만약 name이 없으면 0을, 있다면 기존 value값에서 1을 더함.
map.put(name, map.getOrDefault(name, 0) + 1);
}
for(String name : completion){
//name으로 했을 때 값이 존재하면 value값이 감소함
//없다면 0이 아님
map.put(name, map.get(name) - 1);
}
for(String key : map.keySet()){
//0이 아니면 완주를 못한 사람
if(map.get(key) != 0){
return key;
}
}
return answer;
}
}
위에서 말한대로 구현했다.
데이터를 넣어주고 만약 곂치는 데이터가 있다면 Value는 업데이트가 될 것이다.
getOrDefault는 만약 Key가 존재하지 않는다면 0을, 있다면 +1을 해준다.
2번째 for문에서 name으로 완주한 사람을 가져오고 Key에 대한 Value를 하나씩 빼준다면 중복데이터를 다룰 수 있다.
추가적으로 동명이인이 있는데 만약 한 사람만 들어온다면 Key = "mislav", Value = 1인 상태니 하나를 빼면 0이 된다.
이렇게 되면 1명만 완주한 상태가 된다.
3. 마무리
HashMap은 잘 사용하지 않았는데 아직 사용법이 미숙한 것 같다.
대학교 2학년 때 자료구조좀 잘 들을걸 ㅠㅠㅠㅠㅠ
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [Java] 프로그래머스 소수찾기 (1) | 2022.09.21 |
|---|---|
| [Java] 프로그래머스 전화번호 목록 (0) | 2022.05.14 |
| [Java] 프로그래머스 큰 수 만들기 (0) | 2022.05.14 |
| [Java] 프로그래머스 섬 연결하기 (0) | 2022.05.12 |
| [Java] 프로그래머스 구명보트 (0) | 2022.05.11 |