(백준 1075 나누기

Link copied to clipboard

문제 설명

Link copied to clipboard
  • 나누기 몫, 나머지 연산을 활용하는 문제

문제 풀이

Link copied to clipboard
_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() 메서드를 활용해야한다.