프로그래머스 | 콜라 문제 [파이썬 python]

2023. 3. 30. 15:59·Algorithm/프로그래머스
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코드

def solution(a, b, n):
    answer = 0 # 받은 병의 개수
    while n >= a:
        answer += (n // a) * b
        n = (n // a) * b + (n % a)
    return answer

a개의 병을 가져다주면 b개의 병으로 바꿔준다. 

n개의 병을 가지고 있을 때, 총 몇 개의 병을 받을 수 있는지 구하는 문제이다.

 

문제에서 주어진 예시(a=2, b=1, n=20)를 가지고 설명하자면 다음과 같다.

 

a=2, b=1 이므로, 2개를 가져다주면 1개로 바꿔준다. 20개(=n)의 병을 가지고 있을 때, 총 몇 개의 병을 받을 수 있을까?

1) 20개를 모두 가져가 10개로 바꾼다. → (20 // 2) * 1 = 10

  • 바꾼 병의 개수 answer = 10
  • 현재 가지고 있는 병의 개수 n = 10

2) 10개를 모두 가져가 5개로 바꾼다. → (10 // 2) * 1 = 5

  • 바꾼 병의 개수 answer = 10 + 5 = 15
  • 현재 가지고 있는 병의 개수 n = 5

3) 5개 중 4개를 가져가 2개로 바꾼다. → (5 // 2) * 1 = 2

  • 바꾼 병의 개수 answer = 10 + 5 + 2 = 17
  • 현재 가지고 있는 병의 개수 n = 3
    5개를 가지고 갔을 때 바꿀 수 있는 개수는 (5 // 2) * 1로 2개이고 남은 병의 개수는 5 % 2로 1개이므로 총 3개이다.

4) 3개 중 2개를 가져가 1개로 바꾼다. → (3 // 2) * 1 = 1

  • 바꾼 병의 개수 answer = 10 + 5 + 2 + 1 = 18
  • 현재 가지고 있는 병의 개수 n = 2
    3개를 가지고 갔을 때 바꿀 수 있는 개수는 (3 // 2) * 1로 1개이고 남은 병의 개수는 3 % 2로 1개이므로 총 2개이다.

5) 2개를 모두 가져가 1개로 바꾼다. → (2 // 2) * 1 = 1

  • 바꾼 병의 개수 answer = 10 + 5 + 2 + 1 + 1 = 19
  • 현재 가지고 있는 병의 개수 n = 1

6) 현재 가지고 있는 병의 개수인 n이 a보다 작다. 문제에서 "보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다."라고 제시했으므로 과정을 마친다.

 

n개의 병을 가지고 바꿀 수 있는 병의 개수는 (n // a) * b 개 이다. 

이렇게 병을 바꾸고 난 뒤, 가지고 있는 병의 개수는 바꾼 병 + 남은 병이므로 (n // a) * b + (n % a) 개다.

병을 바꿀 때마다 answer에는 바꾼 병의 개수를 추가해 주고, n은 바꾼 병 + 남은 병으로 갱신해 준다.

위 과정을 n이 a 이상일 때까지 반복해 주고, a보다 작아지면 반복을 멈추고 바꾼 병의 개수 answer를 리턴해주면 된다.

 

이때 주의할 점은 while 문 안에서 answer가 n에 따라 달라지기 때문에 n을 먼저 갱신해 주면 안 된다.

n을 먼저 갱신해 주면 answer에는 처음 가진 병으로 바꾼 병의 개수를 담지 못해 원하는 답을 구할 수 없다.

그러므로 answer를 먼저 정의해 주고 n을 정의해야 한다.

저작자표시 (새창열림)
'Algorithm/프로그래머스' 카테고리의 다른 글
  • 프로그래머스 | 가장 가까운 같은 글자 [파이썬 python]
  • 프로그래머스 | 푸드 파이트 대회 [파이썬 python]
  • 프로그래머스 | 2021 카카오 채용연계형 인턴십 | 숫자 문자열과 영단어 [파이썬 python]
  • 프로그래머스 | 2018 KAKAO BLIND RECRUITMENT | 비밀지도 [파이썬 python]
dduniverse
dduniverse
  • dduniverse
    dduniverse
    dduniverse
  • 전체
    오늘
    어제
    • 분류 전체보기 (245)
      • Algorithm (123)
        • 알고리즘 이론 (8)
        • 백준 (19)
        • 프로그래머스 (83)
        • 구름 알고리즘 먼데이 챌린지 (13)
      • 빅데이터분석기사 (10)
        • 통계 (4)
        • 실기 (6)
      • KT에이블스쿨 (26)
      • FrontEnd (11)
        • React (5)
        • 기타 (6)
      • BackEnd (18)
        • Django (15)
        • Spring (3)
      • DS & ML (11)
        • Machine Learning (9)
        • Kaggle (2)
      • TIL (46)
        • python (22)
        • javascript (3)
        • 오류해결 (10)
        • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 관리
    • 글쓰기
  • 링크

  • 인기 글

  • hELLO· Designed By정상우.v4.10.0
dduniverse
프로그래머스 | 콜라 문제 [파이썬 python]
상단으로

티스토리툴바