-
[백준 Class 2] 10250번 ACM 호텔 C++ 풀이C++/백준 2022. 12. 20. 16:38728x90
https://www.acmicpc.net/problem/10250
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
문제 링크입니다.
난이도는 브론즈3으로 처음 문제를 보면 굉장히 난해해보이지만 그렇지 않습니다.
2차원 배열을 사용해야 하나? 라는 생각이 드실 수도 있는데 그럴 필요 없는 간단한 수학 문제입니다.
먼저 첫번째 테스트 케이스부터 보겠습니다.
H = 6, W = 12, N= 10
즉, 6행 12열에서 10번째로 도착한 손님의 방 번호는 402호가 배정되어야 합니다.
두번째 테스트 케이스는
H = 30, W = 50, N=72
즉, 30행 50열에서 72번째로 도착한 손님의 방 번호는 1203호가 배정되어야 합니다.
규칙을 찾아보도록 합시다.
N을 H로 나눈 나머지가 모두 4, 12로 402호, 1203호와 유사합니다.
여기서 우리는 N을 H로 나눈 나머지가 0이 아니면, 해당 값에 100을 곱하면 층수를 얻을 수 있습니다.
정확한 호수를 구해보도록 하겠습니다.
N을 H로 나눈 나머지를 구했으니, N을 H로 나는 몫을 계산해 봅시다.
첫번째 테스트케이스에서는 몫이 1이되고, 두번째 테스트케이스에서는 몫이 2가 됩니다.
더해주면 401,1202가 되므로 1씩 더 더해줍니다.
그러므로 우리는 N을 H로 나눈 나머지가 0이 아니면, 해당 값에 100을 곱하고 몫을 더한 후 + 1을 해주면 됩니다.
그렇다면 N을 H로 나눈 나머지가 0이면 어떻게 될까요 ?
테스트 케이스를 가정해봅시다.
H = 6, W = 12, N=6이라고 가정해보겠습니다.
첫번째 온 손님에게 101, 두번째 온 손님에게 201호, 즉 6번째 온 손님에겐 601호가 주어지게 됩니다.
H = 6, W= 12, N=12라고 가정해보겠습니다.
첫번째 온 손님에게 101, 두번째 온 손님에게 201호, 6번째 손님에게 601호, 7번째 손님에겐 102호가 주어지게 되고, 12번째 손님에겐 602호가 주어지게 됩니다.
즉 , 우리는 N을 H로 나눈 나머지가 0이면 H에 100을 곱하고 N을 H로 나눈 몫을 더해주면 된다는 사실을 알았습니다.
그럼 코드로 옮겨보고 바로 확인해 보도록 합시다.
#include <iostream> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int testcase; cin >> testcase; while (testcase--) { int H, W, N; int result = 0; cin >> H >> W >> N; if (N % H == 0) { result = H * 100 + (N / H); } else { result = (N % H) * 100 + (N / H) + 1; } cout << result << '\n'; } }
728x90'C++ > 백준' 카테고리의 다른 글
[백준 Class 2] 11650 좌표 정렬하기 C++ 풀이 (0) 2023.01.16 [백준 Class 2] 10814 나이순 정렬 C++ 풀이 (0) 2023.01.16 [백준 Class 2] 1181번 단어 정렬 C++ 풀이 (2) 2022.12.21 [백준 Class 2] 1018번 체스판 C++ 풀이 (0) 2022.12.21 [백준 Class 2] 2798번 블랙잭 C++ 풀이 (0) 2022.12.20