[프로그래머스] 폰켓몬

2025. 1. 11. 17:18·Problem Solving/프로그래머스 (Programmers)

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/1845?language=python3

📰 문제 요약

문제 설명, 입력, 출력, 조건 등 간략하게 정리

문제 설명

폰켓몬은 종류에 따라 번호를 붙여서 구분 (따라서, 같은 종류의 폰켓몬은 번호가 같음)

N 마리의 폰켓몬 중에서 N/2마리를 가져가도 될 때, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하고자 함

입력

N마리 폰켓몬의 종류 번호가 담긴 배열 nums

  • nums : 폰켓몬의 종류 번호가 담긴 1차원 배열
  • nums의 길이 (N)은 1 ≤ N ≤ 10,000 (항상 짝수)
  • 1≤ 종류 번호 ≤ 200,000 (자연수)

출력

N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를

🔓 문제 접근 방식

기본 아이디어

  • 해시를 사용해서 중복값을 제거하여 현재 포켓몬의 종류 수 a를 알아낸다.
  • 해당 종류 수가 N/2보다 크다면, 답은 N/2
  • 해당 종류 수가 N/2보다 작다면, 답은 종류 수 a

사용 알고리즘

  • 해시

💻 구현 방법

  1. 중복을 제외하고 순수한 종류만 한 리스트로 만들기
  2. 해당 리스트의 수를 가지고 갈 폰켓몬 수와 비교
  3. 비교 후 적절한 값 출력

👍🏻 최종 제출 코드

def solution(nums):
    answer = 0
    N = len(nums) # 총 폰켓몬 수
    
    seen = [] # 폰켓몬 종류를 담을 리스트
    
    for num in nums :
        if num in seen : # 만약 중복된 폰켓몬일 경우
            continue # 넘어감
        else : # 새로운 폰켓몬일 경우
            seen.append(num) # 리스트에 추가
    
    if len(seen) >= N/2 : # 폰켓몬 종류가 가지고 갈 폰켓몬보다 클 때
        answer = N/2 # 최대값은 가지고 갈 폰켓몬 수
    else : # 폰켓몬 종류가 가지고 갈 폰켓몬보다 적을 때
        answer = len(seen) # 최대값은 폰켓몬 종류
        
    return answer

📝 새로 학습한 내용

다른 사람의 풀이를 참고해 봤을 때, 정말 간결했다

def solution(ls):
    return min(len(ls)/2, len(set(ls)))

set 형태로 입력 받으면 그냥 중복이 제거가 된 전체 개수가 출력되고, 내가 복잡하게 if-else 문으로 비교한 부분을 간단하게 min을 사용해서 둘 중 최솟값으로 하면 되는 것을 알 수 있었다.

저작자표시 (새창열림)

'Problem Solving > 프로그래머스 (Programmers)' 카테고리의 다른 글

[프로그래머스] K번째 수  (0) 2025.02.02
[프로그래머스] 더 맵게  (0) 2025.02.02
[프로그래머스] 기능개발  (0) 2025.01.19
[프로그래머스] 같은 숫자는 싫어  (0) 2025.01.18
[프로그래머스] 완주하지 못한 선수  (0) 2025.01.11
'Problem Solving/프로그래머스 (Programmers)' 카테고리의 다른 글
  • [프로그래머스] 더 맵게
  • [프로그래머스] 기능개발
  • [프로그래머스] 같은 숫자는 싫어
  • [프로그래머스] 완주하지 못한 선수
vV최강양파Vv
vV최강양파Vv
양파 갓생 살기 프로젝트
  • vV최강양파Vv
    just-stop
    vV최강양파Vv
  • 전체
    오늘
    어제
    • just-stopyoon (22)
      • Front-end (1)
        • mosAIc 리팩토링 (0)
        • React 리액트 (6)
        • SNAPINFO 리팩토링 (0)
      • BoostCamp (4)
      • Problem Solving (7)
        • 백준 (Baekjoon) (0)
        • 프로그래머스 (Programmers) (7)
      • ECONOMY (4)
        • Daily 금융 상식 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 멍청고양이
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    리액트
    코딩테스트
    front-end
    토스
    react개발
    독서
    금융생활
    파이썬
    정렬
    코드
    PS
    코딩 문제
    코딩
    큐
    해시
    react
    금융상식
    구름톤
    개발
    CSS
    the money book
    프로그래머스
    깃허브
    독후감
    구름톤챌린지
    프론트엔드
    알고리즘
    gihub
    가장 큰수
    책 후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
vV최강양파Vv
[프로그래머스] 폰켓몬
상단으로

티스토리툴바