본문 바로가기
IT/CodingTest

[programmers] '최빈값 구하기' 문제 쉽게 풀어보기

by Echinacea 2025. 2. 22.
반응형

0. 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

1. 문제 이해하기

최빈값이란 가장 많이 등장한 숫자를 의미합니다. 만약 최빈값이 여러 개이면 -1을 반환해야 합니다.

 

 

2. 제한 조건

  • 배열의 길이는 1 이상 100 미만
  • 배열의 원소는 0 이상 1000 미만

 

 

3. 예제 살펴보기

입력 (array) 최빈값 (결과)

[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1

 

 

4. 문제 해결 방법

 

1️⃣ 배열을 돌면서 숫자의 등장 횟수를 센다

각 숫자가 몇 번 나오는지 확인하는 것이 중요합니다.

 

2️⃣ 가장 많이 등장한 숫자를 찾는다

최대 등장 횟수를 찾고, 최빈값이 여러 개라면 -1을 반환합니다.

 

 

5. 쉬운 코드 구현 (단계별 설명 포함)

def solution(array):
    # 1️⃣ 최빈값을 찾기 위한 변수 설정
    max_count = 0  # 가장 많이 등장한 횟수를 저장할 변수
    mode = -1  # 최빈값을 저장할 변수
    multiple = False  # 최빈값이 여러 개인지 확인할 변수

    # 2️⃣ 배열을 순회하며 각 숫자의 등장 횟수를 구하기
    for num in array:
        count = array.count(num)  # 현재 숫자가 몇 번 등장했는지 확인

        # 3️⃣ 현재 숫자의 등장 횟수가 기존 최빈값보다 크다면 업데이트
        if count > max_count:
            max_count = count  # 최댓값 갱신
            mode = num  # 최빈값 업데이트
            multiple = False  # 최빈값이 변경되었으므로 중복 여부 초기화
        
        # 4️⃣ 등장 횟수가 같은 숫자가 또 나오면 multiple을 True로 설정
        elif count == max_count and num != mode:
            multiple = True  # 최빈값이 여러 개라면 True 설정

    # 5️⃣ 최빈값이 여러 개이면 -1 반환, 하나라면 mode 반환
    return -1 if multiple else mode

 

 

6. 코드 작성 과정 상세 설명

 

1️⃣ 최빈값을 찾기 위한 변수 설정

  • max_count: 최빈값이 몇 번 등장했는지 저장하는 변수 (초기값 0)
  • mode: 최빈값을 저장하는 변수 (초기값 -1)
  • multiple: 최빈값이 여러 개인지 확인하는 변수 (초기값 False)

 

2️⃣ 배열을 순회하며 각 숫자의 등장 횟수를 구하기

  • for num in array:를 사용하여 배열의 각 숫자를 하나씩 확인합니다.
  • array.count(num)을 사용하여 해당 숫자가 배열에서 몇 번 등장하는지 계산합니다.

 

3️⃣ 현재 숫자의 등장 횟수가 기존 최빈값보다 크다면 업데이트

  • 현재 숫자의 등장 횟수가 max_count보다 크면 max_count와 mode를 업데이트합니다.
  • 새로운 최빈값이므로 multiple을 False로 설정하여 단일 최빈값임을 표시합니다.

 

4️⃣ 등장 횟수가 같은 숫자가 또 나오면 multiple을 True로 설정

  • 현재 숫자의 등장 횟수가 max_count와 같지만 mode와 다르다면 최빈값이 여러 개라는 의미이므로 multiple = True로 설정합니다.

 

5️⃣ 최빈값이 여러 개이면 -1 반환, 하나라면 mode 반환

  • multiple이 True면 -1을 반환하고, 아니면 mode 값을 반환합니다.

 

 

7. 테스트 해보기

print(solution([1, 2, 3, 3, 3, 4]))  # 3
print(solution([1, 1, 2, 2]))        # -1
print(solution([1]))                 # 1

 

8. 결론

✅ 숫자의 개수를 세고, 최빈값을 찾는 과정을 차근차근 진행하면 쉽게 해결할 수 있습니다! ✅ 코드 작성 과정에서 변수 설정, 배열 순회, 최빈값 판별, 여러 개일 경우 처리 순서를 명확히 하면 이해하기 쉬워집니다!

반응형

댓글