파이썬에 대한 감을 잡기 위해 프로그래머스 코딩 기초 트레이닝을 풀면서 AI를 사용했던 문제들을 적어볼까 한다. Lv.0이고 정답률이 63%라 그리 어려운 문제는 아니겠지만, 메서드와 아직 친하지 않다 보니 헤맸던 문제다.
https://school.programmers.co.kr/learn/courses/30/lessons/181916
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
`set`으로 중복을 제거하고 길이로 경우의 수를 나누는 건 금방 파악했지만, 길이가 2이거나 3일 때가 문제였다.
먼저 길이가 2일 때를 보자면, `[1, 1, 1, 2]`는 3+1개, `[1, 1, 2, 2]`는 2+2개로 같은 길이지만 다른 케이스이기 때문이다. 여기서 `list.count(x)`로 어느 쪽이 3개인지 판별하면 두 케이스를 구분할 수 있다.
길이가 3일 때도 비슷한 맥락인데, 쌍이 되는 숫자를 골라내야 한다. `max(iterable, key=list.count)`를 쓰면 등장 횟수가 가장 많은 값을 바로 뽑을 수 있어서 깔끔하게 해결됐다.
있는 그대로 구현하면 되지만 막상 쉽지 않았다.
def solution(a, b, c, d):
numbers = [a, b, c, d]
numbers_set = set(numbers)
if len(numbers_set) == 1:
return 1111 * numbers[0]
elif len(numbers_set) == 2:
p, q = numbers_set
# 동일한 숫자 3개가 있는 경우
if numbers.count(p) == 3 or numbers.count(q) == 3:
triple = p if numbers.count(p) == 3 else q
single = q if triple == p else p
return (10 * triple + single) ** 2
# 동일한 숫자가 2개씩인 경우
else:
return (p + q) * abs(p - q)
elif len(numbers_set) == 3:
# 이터러블의 요소 중 가장 많이 등장하는 요소
pair = max(numbers_set, key=numbers.count)
others = [x for x in numbers_set if x != pair]
return others[0] * others[1]
else:
return min(numbers)
'💻 coding test' 카테고리의 다른 글
| [programmers] 코딩 기초 트레이닝 완료 (0) | 2026.06.17 |
|---|---|
| [programmers / python] 정수를 나선형으로 배치하기 (0) | 2026.06.17 |
| [programmers / python] 두 수의 합 (0) | 2026.06.16 |