폰켓몬
1. 적용 알고리즘 개념 간단하게 설명하기
가장 많은 종류의 폰켓몬을 선택하는 방법
2. 문제 풀이를 위한 접근 방식(or 개념) 설명
1.
nums를 N/2마리 뽑았을 때 가장 많은 종류 뽑기
2.
nums의 unique한 값의 개수 구하기(set, len)
3.
nums의 unique한 값의 개수가 N/2보다 클 수 있음(min 활용)
3. 기본 코드에 대한 설명
def solution(nums):
tmp = len(set(nums))
return min(len(nums)/2, tmp)
Plain Text
복사
set() : 집합, 순서가 없고, unique한 값
tmp : nums의 unique한 값의 길이
min : 최소값
4. 추가적으로 개선한 코드에 대한 설명
X
5. 사용 라이브러리 정리
X
6. 기타(문제 풀이에 어려웠던 점, 구현하고자 했는데 실패한 방식)
X
완주하지 못한 선수
1. 적용 알고리즘 개념 간단하게 설명하기
마라톤을 완주하지 못한 선수의 이름 return
(참가자 중 동명이인이 있을 수 있음)
2. 문제 풀이를 위한 접근 방식(or 개념) 설명
1.
각 원소의 개수를 구하는 collections 라이브러리 사용
2.
participant의 각 원소의 개수 - completion의 각 원소의 개수 구하기
3.
list화 하여 남은 원소의 key값 가져오기
4.
인덱싱을 활용하여 return
3. 기본 코드에 대한 설명
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer)[0]
Plain Text
복사
collections.Counter() : 각 원소의 개수
list(answer)[0]
1.
list화 하는 이유 : 개수를 제거하고 key값만 가져오기 위해
2.
[0] 인덱싱 이유 : 리스트가 아닌 문자열을 리턴해야하기 때문
4. 추가적으로 개선한 코드에 대한 설명
1.
처음 시도 방법 : participant에서 completion에 없는 사람 출력
(동명이인 때문에 테스트 케이스 실패)
5. 사용 라이브러리 정리
collections
collections.Counter() : 각 원소의 개수
(Counter 형식으로 리턴되기 때문에 list화 필요)
List화 하면 key값만 리스트화(각 개수는 사라짐)
🔴 예시
list1 = ['a', 'a', 'b']
list2 = ['b', 'b', 'b']
c1 = collections.Counter(list1)
c2 = collections.Counter(list2)
Plain Text
복사
+ : 합집합
print(c1 + c2)
결과 > Counter({'b': 4, 'a': 2})
Plain Text
복사
& : 교집합
print(c1 & c2)
결과 > Counter({'b': 1})
Plain Text
복사
•
: 차집합
print(c1 - c2)
결과 > Counter({'a': 2})
Plain Text
복사
| : 최대값(각 리스트 중 많은 값을 개수로)
print(c1 | c2)
결과 > Counter({'b': 3, 'a': 2})
Plain Text
복사
list(collections.Counter(리스트).elements()) : 각 리스트의 개수만큼 key값을 리스트
collections.Counter(리스트)
> Counter({'b': 4, 'a': 2})
list(collections.Counter(리스트).elements())
> ['a','a','b','b','b','b']
Plain Text
복사
6. 기타(문제 풀이에 어려웠던 점, 구현하고자 했는데 실패한 방식)
collections을 알아야 쉽게 해결 가능