////////
Search

고관운

폰켓몬

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을 알아야 쉽게 해결 가능