-
[찾아라 프로그래밍 마에스터 / Level1👶🏻] 폰켓몬🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💙프로그래머스 2021. 6. 30. 21:22
1. 문제설명
https://programmers.co.kr/learn/courses/30/lessons/1845
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.
2. 나의 풀이
1. nums 개수 절반만큼 조합을 구한다.
2. 각 조합 별 종류의 개수를 구한다.
3. 종류의 개수 중 최댓값이 answer이다.이렇게 푸니 .... 테스트 케이스 3을 통과하지 못했다.. 하나하나씩 그려가면서 생각해봤더니, (3, 2, 2)에서 종류를 셀 때, (3, 2)와 (2, 3)가 다르다고 보고 +1씩 더 더했다.. ......
from itertools import combinations def solution(nums): answer = 0 combis = list(combinations(nums, len(nums)//2)) counts = [1 for i in combis] for i in range(len(combis)): # 0, 1, 2, 3, 4, 5 for j in range(len(nums)//2 - 1): # 0, 1 if combis[i][j] != combis[i][j-1]: # combis[0][0] combis[0][-1] # (3, 2)와 (2, 3)이 동일한데 둘다 더해지는 문제 발생함 ㅠㅠ counts[i] += 1 print(i, j, combis[i][j], combis[i][j-1]) answer = max(counts) return answer
너무 복잡하게 접근한 것 같다 ......... ㅠㅠㅠㅠㅠㅠㅠ
문제에서 뭘 요구하는지 분석하는 게 가장 중요하다!!!
3. 다른 사람의 풀이
def solution(nums): # N/2선택해야 하는데, 가장 많은 종류의 폰켓몬을 선택하고 싶음. answer = 0 N = len(nums) // 2 ponketmon = list(set(nums)) if len(ponketmon) > N: #포켓몬 종류 수가 더 많으면, 최대가 N개니까 N개. answer = N else: answer = len(ponketmon) #포켓몬 종류 수가 더 적으면, 포켓몬 종류 수. return answer
def solution(nums): return min(len(set(nums)), len(nums)//2)
ㅋㅋ ... ㅋㅋ .... ㅋㅋ 😂 분발하자!
'🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 💙프로그래머스' 카테고리의 다른 글
[코딩테스트 고득점 Kit / Level2 🧒🏻 / 스택/큐] 프린터(python) (0) 2021.07.08 [Summer/Winter Coding(~2018)/Level1👶🏻] 예산 (0) 2021.07.06 [2019 카카오 개발자 겨울 인턴십 / Level1👶🏻] 크레인 인형뽑기 게임(python) (0) 2021.06.29 [2021 KAKAO BLIND RECRUITMENT / Level1👶🏻] 신규 아이디 추천(python) (0) 2021.06.29 [코딩테스트 고득점 Kit / Level1 👶🏻 / 완전탐색] 모의고사(python) (0) 2021.06.27