[프로그래머스 / Level 1] 폰켓몬 (파이썬)

2022. 4. 7. 22:23·🎲 알고리즘 공부/프로그래머스
목차
  1. 📝 문제 요약
  2. https://programmers.co.kr/learn/courses/30/lessons/1845
  3. 🎨 풀이
  4. ⭐ 느낀점

📝 문제 요약

> 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다.

 

당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

 

 

https://programmers.co.kr/learn/courses/30/lessons/1845

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

입출력 예시

- 입출력 예시 1번 : 폰켓몬 4마리 중에서 2마리만 고를 수 있음. 가장 많이 고를 수 있는 경우 => [3,1], [2,3], [1,3] 3가지 방법 모두 result 값은 2로 동일하기 때문에 2를 리턴한다.

- 입출력 예시 2번 : 폰켓몬 6마리 중에서 3마리 고를 수 있음. 가장 많이 고를 수 있는 경우는 [3,2,4] 이고 종류는 총 3가지라서 3을 리턴하면 된다.

- 입출력 예시 3번 : 폰켓몬 6마리 중에서 3마리 고를 수 있음. 가장 많이 고를 수 있는 경우는 [3,3,2], [2,2,3]이다.  2가지 방법 모두 result 값은 2로 동일하기 때문에 2를 리턴한다. 

 

🎨 풀이

💡 첫번째 시도 = 성공(은 아니지만 다른 코드가 기억이 안난다 ㅠㅠ)

 

def solution(nums):
    answer = 0;
    original_nums_len = len(nums) // 2
    nums = set(nums)
    
    if original_nums_len < len(nums) :
        answer = original_nums_len
    else : answer = len(nums)
    
    return answer

 

> 이 코드의 핵심은 set 함수다.

 

1. N/2만큼만 가지고 갈 수 있기 때문에, 보기 편하려고 original_nums_len에 N/2 값을 넣어주었다.

2. nums 집합을 set 함수를 이용해 중복 제거했다.  ( [3,3,3,2,2,2] -> [3,2] )

 > 이 부분에서 폰켓몬 종류가 몇 가지인지 파악한다.

 

3. 만약 N/2보다 종류가 많다면 answer에 N/2를 넣고 RETURN한다.

 그렇지 않다면 answer에 len(nums), 즉 nums에 있는 폰켓몬 종류를 그대로 리턴해준다.

> 최대 N/2까지 고를 수 있기 때문에 만약 nums에 있는 종류가 N/2보다 더 많으면 N/2를 넣어주는거고 아니면 len(nums)만 넣어주는 것이다.  

 

 

 

⭐ 느낀점

 

> 오늘도 아이디어 자체는 괜찮았던 것 같다. 깔끔했다고 생각한다. ㅎㅎ 근데 이걸 한줄로 끝내는 사람도 있더라. 신기하긴했다. 아이디어는 똑같았는데 min(a,b) 이걸 이용해서 바로 끝내버렸더라. 무작정 짧기만 하고 이해하기 어려운 코드는 좋은 것 같지는 않지만, 하나 배우긴 한 것 같다. min 쓸 생각을 못했다. 다른 사람들 코드도 참고하는 게 좋긴 하네~!

 

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 1] 3진법 뒤집기 (파이썬)  (0) 2022.04.09
[프로그래머스 / Level 1] 약수의 개수와 덧셈 (파이썬)  (0) 2022.04.08
[프로그래머스 / Level 1] 체육복 (파이썬)  (0) 2022.04.06
[프로그래머스 / Level 1] K번째수 (파이썬)  (0) 2022.04.05
[프로그래머스 / Level 1] 완주하지 못한 선수 (파이썬)  (0) 2022.04.04
  1. 📝 문제 요약
  2. https://programmers.co.kr/learn/courses/30/lessons/1845
  3. 🎨 풀이
  4. ⭐ 느낀점
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 1] 3진법 뒤집기 (파이썬)
  • [프로그래머스 / Level 1] 약수의 개수와 덧셈 (파이썬)
  • [프로그래머스 / Level 1] 체육복 (파이썬)
  • [프로그래머스 / Level 1] K번째수 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (267)
      • 📑 신입일기 (35)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 📘 독서 (0)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    코테
    신입일기
    til
    50문답
    충무로
    행렬덧셈
    BOJ
    찬양추천
    컨텐더스
    코민이
    6월 목표
    스프링부트
    nodejs
    파이썬
    피보나치수
    정처기
    스프링 부트
    코린이
    일기
    정보처리기사
    폰켓몬
    카카오
    오블완
    연습문제
    코드업
    프로그래머스
    오버워치
    백준
    codeup
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 1] 폰켓몬 (파이썬)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.