문제 확인하기

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • a개의 콜라를 제출해서 1개의 콜라를 받는다고 가정하면, N개의 콜라는 Q 번 교환하는데 사용된 콜라와, 교환에 활용되지 못한 R 개의 콜라로 표현할 수 있다.
  • Q번의 교환을 통해 얻을 수 있는 콜라의 개수는 콜라 교환비 값인 b를 곱해주면 된다. 
# 몫 : 새로 받을 콜라 개수, 나머지 : 남은 콜라 개수
def solution(a, b, n):
    answer = 0
    # 교환 가능할 때 까지 실행
    while n >= a:
        q, r = divmod(n, a)
        # 교환 비가 1보다 큰 경우
        q *= b
        # 받은 콜라 개수 추가
        answer += q
        # 현재 콜라 개수 갱신
        n = q + r
    return answer

 

다른 사람 풀이

  • a개의 콜라를 제출해서 b개의 콜라를 받는 과정은 a - b로 나타낼 수 있다.
  • 조건에 따라 a는 항상 b 보다 크기 때문에 마지막 a - b 실행 때는 콜라를 되돌려 받지 못한다.
  • 따라서 n에서 b를 뺀 값을 a - b로 나눈 몫이 곧 교환 횟수를 나타내게 된다.
  • 마지막에 b를 곱해서 교환비를 맞춰준다.
solution = lambda a, b, n: max(n - b, 0) // (a - b) * b
 

프로그래머스

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

programmers.co.kr