let num = Int(readLine()!)!

for _ in 1...num {
    let tmp = readLine()!.split(separator: " ").map{ Int($0)! }
    let H = tmp[0]
    let N = tmp[2]
    let h = (N - 1) % H + 1 // 99 % 10 + 1 // 9 % 7 == 2
    let w = (N - 1) / H + 1
    let wString = w < 10 ? "0\(w)" : "\(w)"
    print("\(h)\(wString)")
}

 

  • H는 층 수, W는 방 수, N은 사람 수 를 의미합니다.
  • 배정되어야 하는 층 수는 나머지를 통해서 구할 수 있습니다.

나머지로 구현했을 때 실수하는 부분

  • 예를 들어 입력값이 6 12 10이라면 N % H 를 통해서 4 층에 배정해야 한다는 것을 구할 수 있습니다.

하지만 만약 10 10 100 과 같이 N % H 의 값이 0이라면? 성립하지 않고 1010호, 즉 10층에 배정되어야 하지만 0의 결과가 나오게 됩니다. 그렇기 때문에 N에서 1을 빼고 마지막 결과값에 1을 더해주면 N과 H가 같다 하더라도 제대로된 결과값을 얻을 수 있게 됩니다.

 

추가로 w 호실을 구할 때도 마찬가지로 (N / H) + 1 의 값으로 구할 것 같지만 똑같이 10 10 100은 1010의 값을 출력해야 하지만 1001의 값이 나오게 됩니다. 하지만  N에서 1을 빼고 연산 후 마지막 결과값에 1을 더해주면 원하는 결과를 얻을 수 있게 됩니다.

 

ytw_developer