상세 컨텐츠

본문 제목

99클럽 코테 스터디 10일차 TIL + 오늘의 학습 키워드 : 해시

본문

728x90
반응형


제목: 99클럽 코테 스터디 10일차 TIL + 오늘의 학습 키워드 : 해시


- 오늘의 학습 키워드 : 해시

 

오늘도 키워드 힌트가 '해시'

 

프로그래머스 -폰켓몬 문제


- 공부한 내용 본인의 언어로 정리하기
1. set()메서드
: 중복인 값을 제외시킨 값을 반환시킨다.

 

2. len()메서드

: 길이를 반환한다.

 

 

- 오늘의 회고

오늘 문제...45분이 권장이던데, 실제 코드는 3줄이였다.
그렇다는건,,, 문제를 어떻게 이해하고 어떻게 다가갈 것인지에 대한 고민하는 시간이 필요하다는 것인데,
여전히 이해를 하지 못했다.
변수에 각각 할당하는 이유에 대해서는 확인했는데,

실제 return에서 min(중복제거한 길이, 입력폰케몬갯수의/2) 이거 자체는 알겠는데,,, 최대 선택할 수 있는 경우의 수를 구하는 것 자체가..;;; 분명 이거 초등학교 수학 문제인데,,, 거의.. .뇌가 너무 많이 쉬다가 온 것 같다.. ㅠㅠ

 

- 어떤 문제가 있었고, 나는 어떤 시도를 했는지

 

def solution(nums) :
	# 1차원 배열의 길이는 정수로 반환되고, 그 반환값을 2로 나눈 값을 selNum 변수에 넣는다.
    # 이 변수는 추후 3마리를 고를 수 있다라는 전제하에 만든 것.
    selNum = len(nums)//2

나는.... nums 의 2 나눈 값만을 selNum에 저장했다.
중복을 제외한 값의 길이 또한 저장할 생각을 못했다.

- 어떻게 해결했는지

폰켓몬을 선택하는 문제를 해결하기 위해서는 주어진 폰켓몬 종류 번호의 리스트에서 최대한 다양한 종류의 폰켓몬을 선택해야 합니다. 이를 위해 다음과 같은 방법으로 접근할 수 있습니다.

폰켓몬 종류 수 카운트: 주어진 리스트에서 각 종류의 폰켓몬 개수를 세어봅니다.
선택할 폰켓몬 수 계산: 전체 폰켓몬 수 ( N )의 절반인 ( N/2 )를 계산합니다.
최대 종류 수 결정: 폰켓몬 종류의 개수와 선택할 수 있는 폰켓몬 수 ( N/2 )를 비교하여, 더 작은 값을 선택합니다.
이 과정을 코드로 구현하면 다음과 같습니다:

python



def solution(nums):
    # 폰켓몬 종류의 개수
    unique_types = len(set(nums))
    # 선택할 수 있는 폰켓몬 수
    can_select = len(nums) // 2
    
    # 최대 선택할 수 있는 종류의 수는 두 값 중 작은 값
    return min(unique_types, can_select)


# 예시 테스트 케이스
print(solution([3, 1, 2, 3]))  # 2
print(solution([3, 3, 3, 2, 2, 4]))  # 3
print(solution([3, 3, 3, 2, 2, 2]))  # 2
설명:
set(nums)를 사용하여 nums에서 중복을 제거하고, 고유한 폰켓몬 종류의 개수를 계산합니다.
len(nums) // 2를 통해 선택할 수 있는 폰켓몬의 수를 구합니다.
마지막으로, 두 값 중 작은 값을 반환하여 최대한 많은 종류의 폰켓몬을 선택할 수 있는 수를 결정합니다.
이 방법은 시간 복잡도가 ( O(N) )으로, 최대 10,000개의 폰켓몬을 처리하는 데 적합합니다.


- 무엇을 새롭게 알았는지

1. 문제를 파악해서 중복을 제거한 고유한 포켓몬 개수와 선택할 수 있는 폰켓몬 수 중의 최소값이 최대한 많은 종류의 폰켓몬을 선택할 수 있는 수를 결정한다는... 부분이 문제 이해하고 저기까지 도달하면 쉽게 풀 수 있는 문제인 것 같으나,

어렵다... 뭔가 값을 도출하기 위한 과정이 길지 않아서 시간복잡도가 O(N)인가보다.


- 내일 학습할 것은 무엇인지

 

사수에게 꼭 완성코드를 받아서 그 코드를 분석할 것이다.

728x90
반응형

관련글 더보기