반응형
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. 결론
✅ 숫자의 개수를 세고, 최빈값을 찾는 과정을 차근차근 진행하면 쉽게 해결할 수 있습니다! ✅ 코드 작성 과정에서 변수 설정, 배열 순회, 최빈값 판별, 여러 개일 경우 처리 순서를 명확히 하면 이해하기 쉬워집니다!
반응형
'IT > CodingTest' 카테고리의 다른 글
[programmers] '공 던지기' 문제 해설 및 정답코드 (0) | 2025.03.20 |
---|---|
[programmers] '2차원으로 만들기' 문제해설 (0) | 2025.03.18 |
[programmers] '주사위의 개수' 문제해설 (0) | 2025.03.17 |
[programmers] '외계행성의 나이' 문제 간단하게 풀기 (1) | 2025.02.27 |
[programmers] '가위 바위 보' 문제를 푸는 여러 가지 방법 (0) | 2025.02.25 |
댓글