[문제]
두 정수 N과 F가 주어진다. 지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다. 만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.
예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다. N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.
https://www.acmicpc.net/problem/1075
1075번: 나누기
첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.
www.acmicpc.net
🎨 풀이
💡 전체 코드
n = int(input())
f = int(input())
tmp = (n // 100) * 100
a = f - ( tmp % f )
if a == f :
print("00")
else :
if len(str(a)) == 1:
print("0",end='')
print(a)
else :
print(a)
> 핵심 : n의 가장 뒤 두자리를 00으로 바꾼 후 거기서 얼마만큼 더 있으면 나누어떨어지는 지 알아보고 그만큼 출력하기
🍦 코드 설명 (실행 순서대로 나열)
# main
n = int(input())
f = int(input())
1. n과 f를 입력받는다.
- n : 정수 (뒤에 두자리 변경될 예정)
- f : 나눌 수
tmp = (n // 100) * 100
a = f - ( tmp % f )
2. tmp에 n // 100 * 100 값을 넣는다.
- 100을 나눴다가 그대로 곱해주는 이유는, n의 가장 뒤 두자리를 00으로 만들어주기 위함이다.
- (n이 100보다 크거나 같다고 했기 때문에 오류가 나지 않는다)
- (ex) 23665 => 23600
3. a에 f - (tmp % f) 의 연산 값을 넣어준다.
- (ex) n = 200 , f = 34 일 때 나눈다면 몫은 6, 나머지는 30이 나온다.
- 여기서 4만 더해주면 n 이 f 로 나누어떨어지는 수 중 가장 작은 수를 만들어낼 수 있다.
- 그래서 f - (tmp % 4) 값을 a에 넣어준 후 경우에 맞게 출력해주는 것이다.
if a == f :
print("00")
else :
if len(str(a)) == 1:
print("0",end='')
print(a)
else :
print(a)
4. 경우에 맞게 출력해주면 된다.
4-1. 만약, a가 f와 같다면 그건 다른 걸 더해주지 않아도 나누어떨어진다는 뜻이기 때문에 00을 출력해준다.
4-2. a와 f가 같지 않은데, a가 한 자리 숫자라면 앞에 0을 붙여준 후 a를 출력한다.
4-3. a와 f가 같지 않은데 a가 두자리라면 a를 그대로 출력해준다.

끝~
⭐ 느낀점
> 이 문제는 그 백준 질문 게시판에 올라와있길래 반례를 찾아주고 싶어 풀게 되었다. 이 문제를 푸는 방식은 좀 괜찮았던 것 같은데 그것을 설명해내는 건 좀 서툴렀다고 생각한다. ㅠㅠ 분발해야겠다. 그래도 처음으로 답변도 남겨보고 재밌는 경험을 했다.
'🎲 알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 11721번 - 열 개씩 끊어 출력하기 (파이썬) (0) | 2022.08.30 |
---|---|
[백준] 2475번 - 검증수 (파이썬) (0) | 2022.08.29 |
[백준] 2576번 - 홀수 (파이썬) (0) | 2022.08.28 |
[백준] 1924번 - 2007년 (파이썬) (0) | 2022.08.26 |
[백준] 2920번 - 음계 (파이썬) (0) | 2022.08.25 |