문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/340199
문제
민수는 다양한 지폐를 수집하는 취미를 가지고 있습니다. 지폐마다 크기가 달라 지갑에 넣으려면 여러 번 접어서 넣어야 합니다. 예를 들어 지갑의 크기가 30 * 15
이고 지폐의 크기가 26 * 17
이라면 한번 반으로 접어 13 * 17
크기로 만든 뒤 90도 돌려서 지갑에 넣을 수 있습니다. 지폐를 접을 때는 다음과 같은 규칙을 지킵니다.
지폐를 접을 때는 항상 길이가 긴 쪽을 반으로 접습니다.
접기 전 길이가 홀수였다면 접은 후 소수점 이하는 버립니다.
접힌 지폐를 그대로 또는 90도 돌려서 지갑에 넣을 수 있다면 그만 접습니다.
지갑의 가로, 세로 크기를 담은 정수 리스트 wallet
과 지폐의 가로, 세로 크기를 담은 정수 리스트 bill
가 주어질 때, 지갑에 넣기 위해서 지폐를 최소 몇 번 접어야 하는지 return하도록 solution함수를 완성해 주세요.
지폐를 지갑에 넣기 위해 접어야 하는 최소 횟수를 구하는 과정은 다음과 같습니다.
- 지폐를 접은 횟수를 저장할 정수 변수 answer를 만들고 0을 저장합니다.
- 반복문을 이용해 bill의 작은 값이 wallet의 작은 값 보다 크거나 bill의 큰 값이 wallet의 큰 값 보다 큰 동안 아래 과정을 반복합니다.
2-1. bill[0]이 bill[1]보다 크다면
2-2. 그렇지 않다면bill[0]을 2로 나누고 나머지는 버립니다.
2-3. answer을 1 증가시킵니다.bill[1]을 2로 나누고 나머지는 버립니다.
- answer을 return합니다.
- 위의 의사코드와 작동방식이 다른 코드를 작성해도 상관없습니다.
내 답안
def solution(wallet, bill):
answer = 0
while max(wallet) < max(bill) or min(wallet) < min(bill):
bill = [max(bill) // 2, min(bill)]
answer += 1
return answer
결론 및 느낀점
이 문제를 통해서 지폐를 접어서 지갑에 맞게 만드는 간단한 문제였지만, 조건에 따라 알고리즘을 어떻게 구현해야 할지 고민해볼 수 있는 좋은 기회였습니다. 지폐의 가로, 세로 길이 중 긴 쪽을 접는 과정을 반복하면서 접어야 하는 최소 횟수를 구하는 과정이 직관적이면서도 효율적인 접근을 요구했습니다.
특히, 두 매개변수(지갑 크기와 지폐 크기) 간의 크기 비교를 통해 언제 접기를 멈출지 결정하는 로직을 짜는 것이 핵심이었습니다. 이런 유형의 문제는 실제 코딩 테스트에서도 자주 등장하는 유형이기 때문에, 이번 경험을 통해 유사한 문제에 더 빠르고 정확하게 접근할 수 있는 능력을 기를 수 있었다고 생각합니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / PCCP 기출문제 3번 / Python] 충돌위험 찾기 (0) | 2025.05.31 |
---|---|
[프로그래머스 / PCCP 기출문제 2번 / Python] 퍼즐 게임 챌린지 (0) | 2025.05.31 |
[프로그래머스 / PCCP 기출문제 1번 / Python] 동영상 재생기 (0) | 2025.05.31 |
[KAKAO BLIND RECRUITMENT / 2021 / Python] 합승 택시 요금 (0) | 2025.05.30 |
[KAKAO BLIND RECRUITMENT / 2023 / Python] 이모티콘 할인행사 (0) | 2025.05.30 |