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 | 31 |
Tags
- springsecurity
- 오블완
- 토이프로젝트
- 액세스토큰
- githubactions
- 백준
- CI/CD
- 데이터베이스
- springsecurityoauth2client
- AWS
- java
- docker
- 파이썬
- oauth2
- yaml-resource-bundle
- JIRA
- 스프링시큐리티
- 재갱신
- 스프링
- 소셜로그인
- 스프링부트
- 리프레시토큰
- 도커
- springdataredis
- 티스토리챌린지
- 국제화
- 프로그래머스
- 트랜잭션
- 메시지
- Spring
Archives
- Today
- Total
땃쥐네
[Programmers] [Python] [042576] 완주하지 못한 선수 본문
문제
- 플랫폼 : 프로그래머스
- 번호 : 042576
- 제목 : 완주하지 못한 선수
- 난이도 : Level 1
- 완주하지 못한 선수의 이름을 return
- 문제 : 링크
필요 지식
- 해시
- 파이썬 : Counter
풀이
Python
풀이1
from collections import Counter
def solution(participant, completion):
participant, completion = Counter(participant), Counter(completion)
for key, value in participant.items():
if key not in completion or completion[key] != value:
return key
- 파이썬에서는 Counter를 통해, 각각의 요소들의 등장횟수를 카운터로 모을 수 있다.
- participant를 순회하면서, completion에 없거나, value가 다른 값을 찾아 바로 반환한다.
풀이2
from collections import Counter
def solution(participant, completion):
return list((Counter(participant) - Counter(completion)).keys())[0]
- Counter 끼리는 뺄 수 있는데, 연산의 결과 카운트가 0이면 해당 key, value 쌍은 삭제시키는 식으로 카운트를 차감한다. 연산의 결과
남아있는 요소가 우리가 찾는 답이다. - 이 점을 이용하여 Counter를 바로 list화 하고, 0번 인덱스의 요소를 반환시키면 된다.
(참고) Java
import java.util.HashMap;
import java.util.Map;
public class Solution {
public String solution(String[] participants, String[] completions) {
Map<String, Integer> counter = new HashMap<>();
for (String p : participants) counter.put(p, counter.getOrDefault(p, 0) + 1);
for (String c : completions) counter.put(c, counter.get(c) - 1);
for (String key : counter.keySet()) {
if (counter.get(key) != 0) {
return key;
}
}
return "";
}
}
- 자바에서는 카운터가 없으므로 직접 카운터를 만들어야한다.
- 카운터에, 참가자가 등장할 때마다 참가자의 카운트를 증가시킨다.
- key를 참가자명, value를 참가자 등장 횟수로 한다.
.getOrDefault(...)
를 사용하면 기본값을 지정하여 가져올 수 있다.
- 완주자를 순서대로 참가자 카운터에서 차감한다.
- 카운터의 keySet을 순서대로 탐색하면서, 해당 key의 카운트가 0이 아닌 key를 찾아내 바로 반환하면 된다.
- 마지막에 있는 null은 문제의 조건대로라면 절대 반환될 일이 없지만 작성하지 않으면 컴파일 에러가 발생하기 때문에 작성했다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] [120890] 가까운 수 (0) | 2023.01.18 |
---|---|
[Programmers] [Java] [120866] 안전지대 (0) | 2023.01.17 |
[Programmers] [Java] [120846] 합성수 찾기 (0) | 2023.01.13 |
[Programmers] [Java] [120840] 구슬을 나누는 경우의 수 (0) | 2023.01.12 |
[Programmers] [Java] [064061] 크레인 인형뽑기 게임 (0) | 2023.01.12 |
Comments