TIL (2022.02.15)
➕ 오늘 푼 문제
프로그래머스 - 완주하지 못한 선수
➕ 아이디어
- 참가자들을 탐색하며 key = 이름, value = 인원수 로 갖는 해시를 만든다
- 완주자들을 탐색하며 해시의 key 목록에 있다면 인원수를 줄인다. 인원수가 0이라면 해시에서 제거한다.
- 문제 조건에 따라서 미완주자는 한명이다. 따라서 해시에 남은 한 사람의 이름을 반환한다.
➕ Java 코드
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(String p : participant){
if(map.containsKey(p)){
map.replace(p, map.get(p)+1);
}else{
map.put(p, 1);
}
}
for(String c : completion){
if(map.containsKey(c)){
map.replace(c, map.get(c)-1);
if(map.get(c) == 0){
map.remove(c);
}
}
}
for(String key : map.keySet()){
answer = key;
}
return answer;
}
}
➕ Python 코드
def solution(participant, completion):
_dict = {}
for p in participant:
if p not in _dict.keys():
_dict[p] = 1
else:
_dict[p] += 1
for c in completion:
if c in _dict.keys():
_dict[c] -= 1
if _dict[c] == 0:
_dict.pop(c)
return list(_dict.keys())[0]
➕ 궁금한 내용 및 소감
- 해시(파이썬에서는 딕셔너리, 자바에서는 맵)의 삽입, 삭제, 수정, 조회 메소드를 모두 알아야지 풀 수 있는 문제로, 기본적인 함수들을 익힐 수 있어서 좋았다. 특히 자바는 아직 함수들이 눈에 익지 않아서 많이 찾아보면서 했다. 이번에 한번 짚고 넘어갈 수 있어서 좋았다.
- 다른 사람들의 풀이를 보니, 자바의 경우
map.getOrDefault(key, default)
메소드로 쉽게 초기화 할 수 있었다. 다음번에 활용해 보면 좋을 것 같다!
➕ 참고 문헌
- Python - Dictionary
- 딕셔너리에서 키 제거는
_dict.pop(key)
로 할 수 있다.
_dict.keys()
함수는 dict_keys 타입으로, 원소에 접근하려면 list 형으로 변환해주어야 한다.
- Java - HashMap 값 추출
- Java - HashMap 특정 key/value 값 존재여부 확인
- Java - HashMap 저장, 수정, 삭제, 조회