Programmers_최빈값 구하기

HKTUOHA·2023년 3월 2일
0

알고리즘 문제

목록 보기
1/15
post-thumbnail

📌문제



📌코드

def solution(array):
    nums = [0 for _ in range(max(array)+1)]
    for i in array:
        nums[i] += 1
    
    max_count = 0
    
    if len(array) > 1:
        for j in nums:
            if j == max(nums):
                max_count += 1
    
    if max_count > 1:
        return -1
    else:
        return nums.index(max(nums))


📌풀이

  1. 인덱스 리스트 생성
  2. 정수 배열에서 나오는 값과 인덱스의 값이 동일할 때마다 1씩 증가
  3. 정수 배열이 1개일 때는 그 값이 최빈값이므로
    정수 배열이 2개 이상일 때를 구분
  4. 디른 인덱스 리스트의 값이 최빈값과 동일할 경우
    즉, 최빈값이 1개 이상일 경우를 카운트
  5. 최빈값이 2개 이상일 때는 -1, 아니면 최빈값을 리턴

  • '질문하기'를 참고하여 15번 케이스로 추정되는 테스트 케이스 추가
    for i in array:
    	if i:
        	nums[i] += 1
출력 〉 [0, 0, 2, 1, 1]

위의 코드를 아래와 같이 수정

    for i in array:
        nums[i] += 1
출력 〉 [3, 0, 2, 1, 1]

➡️ 성공!



❓오답의 이유 (내 생각)

  • 숫자 0을 정수가 아닌 False로 인식해서인 것 같다.
if 0 == if False

실험 1

테스트 케이스에 1 추가하기

➡️ 테스트 케이스의 1을 인식하여 카운트함


실험 2

if 0 으로 변경

➡️ 답이 0인 케이스를 제외하고 모두 오답


실험 3

if 1 로 변경

➡️ 테스트케이스 모두 통과


✏️결론

if 0 == if False
if 1 == if True



📌실행 결과



참고: https://always-challenger-lab.tistory.com/16

profile
공부 기록

0개의 댓글