(백준 1075 나누기
문제 설명
문제 풀이
_N = (N // 100) * 100
if _N % F:
print(str(_N + (F - _N % F))[-2:])
else:
print("00")
- 수에서 뒤의 두자리, 즉 십의 자리와 일의 자리에만 관심이 있기 때문에 100으 나눈 몫을 구한 후 100을 곱한다.
- 이 때 F로 나누어 떨어지는 수를 구해야 하는데, 백의 자리는 바뀌면 안된다.
- 따라서 위에서 구한 수, 즉 일의 자리수, 십의 자리 수만 변경되는 경우에서 최솟값을 찾아야 한다.
- 만약 N = 1000, F = 3이라고 하면, _N = 1000이 되고
- 1000 이상 3의 배수 중 최소 숫자는 1002가 된다.
- 질문은 이 수를 어떻게 구할 것인가?
- 1000을 3으로 나눈 나머지는 1이고, 이 말은 1000보다 큰 3의 배수를 얻기 위해서는 2를 더해주면 된다.
- 이후 십의자리, 일의 자리를 출력.
func main() {
N, F := nextInt(), nextInt()
_N := int(N/100) * 100
if _N%F == 0 {
fmt.Fprint(wr, "00")
} else {
ans := strconv.Itoa(_N + (F - _N%F))
l := len(ans)
fmt.Fprint(wr, ans[l-2:])
}
}
- Python 코드와 차이점은 형변환을 위해 새로운 변수(ans)를 지정하는것과, 음수 인덱싱이 불가능하여 길이를 구한 뒤 슬라이싱 했다.
const _N = parseInt(N / 100) * 100
if (_N % F) {
const ans = String(_N + (F - _N % F))
const l = ans.length
console.log(ans.slice(l-2))
} else {
console.log("00")
}
- Go와 풀이가 거의 유사하다.
- 다만 문자열 슬라이싱이 대괄호로 할 수 없고,
.slice()
메서드를 활용해야한다.