프그스_해시_폰켓몬_레벨1 (해시테이블_Counter)

RostoryT·2022년 7월 16일
0


메모한 것

2/N 마리 가져갈 수 있다 (N=4면 2마리, N=6면 3마리, N=8면 4마리)
- N = len(arr)
- R = 2/N

같은 종류는 같은 번호

Counter쓰면 되는 거 아닌가?

nCr 수행한 결과물을 set()에 저장해서 중복저장한것 중 max값


1차 코드 - 답아님(시간초과)

  • Permutations랑 Combinations가 시간 많이 잡아먹긴 하는 듯...
from itertools import combinations

def solution(nums):
    answer = []
    
    n = len(nums)
    r = n//2
    
    for i in combinations(nums, r):
        answer.append(len(set(i)))
        
    return max(answer)


print(solution([3,1,2,3]))
print(solution([3,3,3,2,2,4]))
print(solution([3,3,3,2,2,2]))


솔루션 코드 - 내가 푼

  • Counter로 key-val쌍으로 나타낸다 = 중복제거가 된다
  • 근데 굳이 중복제거하겠다고 Counter를 할 필요가 없었다.....!
    • 아래 다른사람 풀이 코드에 set으로 중복제거함..ㅋ
  • 생각해보면
    • 내가 최대로 가져갈 수 있는 수는 n//2임 <--이게핵심
    • 그리고 주어진 (중복제거된)포켓몬 종류 중에서 최대로 가져갈 수 있는 건 len(nums)임
from collections import Counter

def solution(nums):
    n = len(nums)
    r = n//2
    
    cnt = Counter(nums)
    return min(r, len(cnt))
    
    
print(solution([3,1,2,3]))
print(solution([3,3,3,2,2,4]))
print(solution([3,3,3,2,2,2]))



솔루션 코드 - 다른 사람

  • 내가 생각한게 맞긴 했으나 쓸데없이 Counter쓰지말고 set쓰자
def solution(ls):
    return min(len(ls)/2, len(set(ls)))
profile
Do My Best

0개의 댓글