본문 바로가기
연습하기/Python 문제풀이

[Python] 99클럽 코테 스터디 6일차 TIL 반복문, 딕셔너리

by 니나노래방 2024. 7. 28.

 

- 오늘의 학습 키워드 : 역시 반복문과 비교하기

- 오늘의 회고

   문제 링크 : 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

 

댓글