[Python] 나누기 - 백준 1075

찐새·2022년 6월 3일
0

코딩테스트

목록 보기
9/53
post-thumbnail

나누기

문제

두 정수 N과 F가 주어진다. 지민이는 정수 N의 가장 뒤 두 자리를 적절히 바꿔서 N을 F로 나누어 떨어지게 만들려고 한다. 만약 가능한 것이 여러 가지이면, 뒤 두 자리를 가능하면 작게 만들려고 한다.

예를 들어, N=275이고, F=5이면, 답은 00이다. 200이 5로 나누어 떨어지기 때문이다. N=1021이고, F=11이면, 정답은 01인데, 1001이 11로 나누어 떨어지기 때문이다.

입력

첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다.

출력

첫째 줄에 마지막 두 자리를 모두 출력한다. 한자리이면 앞에 0을 추가해서 두 자리로 만들어야 한다.

예제 입력 1
1000
3
예제 출력 1
02

예제 입력 2
2000000000
100
예제 출력 2
00

예제 입력 3
23442
75
예제 출력 3
00

예제 입력 4
428392
17
예제 출력 4
15

예제 입력 5
32442
99
예제 출력 5
72

시간 제한메모리 제한
2 초128 MB

풀이

def changeNum(n):
    n = list(n)
    length = len(n)
    return int("".join(n[:length-2]) + "0"*2)

n = input()
f = int(input())
tmp = changeNum(n)

while True:
    if tmp % f == 0:
        break
    tmp += 1

tmp = str(tmp)
print(tmp[len(tmp)-2:].zfill(2))

가장 작은 값은 뒤의 두 자리를 00으로 만들고 1을 계속 더해줬을 때 나눠 떨어지는 값이다. 따라서 뒤의 두 자리를 00으로 바꿔주고, 그 부분만 출력했다. 십의 자리에 0을 채우라는 조건이 있어 zfill을 사용했다.

풀다가 changeNum함수가 의미없어서 코드를 수정했다.

n = input()
f = int(input())
tmp = int(n[:-2] + "00")

while True:
    if tmp % f == 0:
        break
    tmp += 1

tmp = str(tmp)
print(tmp[-2:].zfill(2))

변수[-1]이 맨 뒤인 것은 알았는데, 변수[-2]가 되는 줄은 몰랐다. 앞으로는 이렇게 사용해야지.

숏코딩은 신기해서 가져왔다.

n, f = int(input()),int(input())
print(str((n%100 - n%f) % f).zfill(2))

숏코딩에 예제 1을 대입해보면 -1 % 3 = 2가 나온다. 내가 이해 못한 부분은 "-1을 3으로 어떻게 나누며, 나머지가 왜 2인가?"였다. 여기저기 찾아보면서 내가 내린 계산 방법은 -피제수 = 제수*(-1) + 나머지이다. 제수를 음수화해서 피제수를 빼주면 나머지인 셈이다. 예제를 활용하면 -1 = 3*(-1) + xx = 2가 나온다. 오래된 수포자 출신이라 이해하는데 정말 오래 걸렸다. 물론 숏코딩 로직은 모르겠다.

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글