- 오늘의 학습 키워드 : 역시 반복문과 비교하기
- 오늘의 회고
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/1845
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
1) 숫자 리스트가 주어졌을 때, 중복 없이 가져갈 수 있는 최대의 숫자 조합 수를 구하는 문제라고 해석했습니다.
2) 선택할 수 있는 숫자에는 제한이 있습니다. 리스트의 수의 절반만 가져갈 수 있습니다.
3) 즉, 1)에서 나온 조합 수와 2)에서의 숫자를 비교하여 더 적은 값을 출력해야 합니다. - 어떻게 해결했는지
1) 빈 딕셔너리를 만들고, 숫자가 나올 때마다 횟수를 추가하도록 합니다. (1번이 2번, 2번이 3번 나왔으면 {'1번': 2, '2번':3}을 기록하게 하는 것입니다)
2) 딕셔너리의 key의 갯수를 len함수로 구해줍니다.
3) 리스트의 수의 절반을 구해 limit을 정하고, 2)와 3)을 비교해 더 큰 값을 answer 변수에 저장합니다.
4) answer를 리턴합니다.
def solution(nums):
# 가져갈 수 있는 포켓몬의 수
take = len(nums) / 2
# unique 조합 세기
pokemon_dict = {}
for num in nums:
if num in pokemon_dict:
pokemon_dict[num] += 1
else:
pokemon_dict[num] = 1
# 가져갈 수 있는 포켓몬의 수와 비교해서 max로 가져갈 수 있는 수 찾기
if len(pokemon_dict) <= take:
answer = len(pokemon_dict)
else:
answer = take
return answer
- 무엇을 새롭게 알았는지
딕셔너리가 아닌 리스트로도 문제를 풀 수 있겠네요.. 왜 딕셔너리로만 풀려고 했을까..?
def solution(nums):
# 가져갈 수 있는 포켓몬의 수
take = len(nums) / 2
# unique 조합 세기
# 빈 리스트 만들기
pokemons = []
# 반복문을 돌면서 pokemons 리스트에 없을 때만 포켓몬 번호 추가하기
for num in nums:
if num not in pokemons:
pokemons.append(num)
# unique한 포켓못 리스트 숫자 구하기
pokemon_cnt = len(pokemons)
# 가져갈 수 있는 포켓몬 수와 비교해서 max로 가져갈 수 있는 수 찾기
if pokemon_cnt <= take:
answer = pokemon_cnt
else:
answer = take
return answer
'연습하기 > Python 문제풀이' 카테고리의 다른 글
[Python] 99클럽 코테 스터디 7일차 TIL : Break (0) | 2024.07.29 |
---|---|
[Python] 99클럽 코테 스터디 3일차 TIL : 큐, 스택 (0) | 2024.07.29 |
[Python] 99클럽 코테 스터디 5일차 TIL 반복문, 딕셔너리 (0) | 2024.07.27 |
[Python] 99클럽 코테 스터디 1일차 TIL 형변환 (0) | 2024.07.25 |
[Python] 99클럽 코테 스터디 3일차 TIL 반복문과 조건문 (3) | 2024.07.25 |
댓글