여러 문제를 풀다 보니 슬슬 재미가 붙는 것 같다.
처음으로 브론즈에서 가장 높은 티어의 문제를 풀었다.
가장 효율적인 코드인지는 잘 모르겠지만 뿌듯한 감이 있다.
5x + 3y = n이라는 식을 이용해 풀었다.
x는 반복되지 않아야 해서 위에 미리 저장을 해 고정시켰다.
5가 더 큰 값이기 때문에 x를 기준으로 삼았다.
먼저 5x를 식 오른쪽으로 넘겨 새로 저장해주었다.
반복문 속에서 n을 계속 사용해야 해서 m이라는 새로운 변수로 저장했다.
x값을 점차 줄여나가면서 y에 들어갈 수 있는 값을 확인했다.
n으로 딱 떨어지면 바로 반복문을 빠져나갈 수 있도록 했다.
또는 x로 더 이상 검사할 수 없을 때 반복문을 빠져나가도록 했다.
아래 코드에 주석으로 상세한 설명을 붙여놓았다.
n = int(input())
# 5x + 3y = n을 이용
x = n // 5 # 반복되면 안되는 x를 미리 저장
while 1:
m = n - 5 * x # 3y를 만들어 줌. n값을 바꿀 수 없어 새로운 변수 형성
y = m // 3 # 몫을 계산해서 y가 될 수 있는 값을 저장
m = m % 3 # 조건문에서 검사하기 위해 저장해 줌.
if m == 0 or x == 0: # 딱 떨어지는 값이거나 x로 더이상 검사할 수 없을 때까지 반복.
break
x -= 1 # x값을 줄여나가면서 차례로 검사
if m == 0: # n으로 떨어지는 값일 경우 결과 출력.
print(x + y)
else: # n으로 떨어지지 않을 경우 -1 출력.
print(-1)
'알고리즘 > 문제풀이' 카테고리의 다른 글
백준[2810] 컵홀더 (파이썬) (0) | 2021.12.10 |
---|---|
백준[2864] 5와 6의 차이 (파이썬) (0) | 2021.12.10 |
백준[5585] 거스름돈 (파이썬) (0) | 2021.12.10 |
백준[10162] 전자레인지 (파이썬) (0) | 2021.12.09 |