택시기하학의 영향으로 처음에 기하학문제인줄 알았다. 그런데 문제를 읽어보니 엘리베이터가 있고 가장 아래쪽에서 방을 차지하기 때문에 사진과 같은 순서로 방이 찬다고 생각했다. 이렇게 하면 조건에 맞게 채워질 줄 알았음
#include <iostream>
int main() {
int t, h, w, n;
scanf("%d", &t);
for(int i = 0; i < t; i++){
scanf("%d %d %d", &h, &w, &n);
printf("%d%02d\n", n%h, n/h + 1);
}
}
그래서 코드를 이렇게 짰다. 한 줄 입력받아 한 줄 출력하게끔 하고, 몫과 나머지를 구하는데 한자리 수를 출력할때는 0을 붙여야 하므로 %02d를 사용했다.
그리고 예제 입력을 돌려봤는데 그대로 나왔다.
하지만 실패..ㅎㅎ 정답률이 낮은 이유가 있었다.
지금 다시 봐서는 어디가 틀린지 잘 모르겠다. 엘리베이터 안 쓰고도 올라갈 수 있으니 이렇게 올라가는게 더 좋을 수도 있지 않을까 생각했는데 이것보다는 항상 엘리베이터를 타는게 더 빠른 것 같다. (꺾어 올라가는 것 보다 엘베 타서 직선거리로 가는 게 더 빠르므로)
그 다음 의심가는게 호 수를 잘못 구했나 싶다. 왜냐면 w를 입력 받아놓고 쓰지를 않아서 w를 써서 구해야 했어야 하는 문제인가 싶기도 하고.
아니면 또 계산하다 터졌나? 싶은데 그러기에는 값이 너무 작다.
이 다음에는 방이 꽉 찼다고 생각하고 6 1 6을 넣어봤다. 정상으로 들어갔다면 601호가 나와야 할것이다. 그런데 002호가 나왔다. 여기서 틀렸구나! 어디서 틀렸는지 알았으니 이건 수업 듣고 와서 다시 풀어봐야겠다.
결국 저 위의 나눠떨어지는 것들이 문제인 것이다..
그래서 나눠떨어질 때는 어떻게 동작을 하는지 알아보고 경우를 나눠서 구분을 했다.
#include <iostream>
int main() {
int t, h, w, n;
scanf("%d", &t);
for(int i = 0; i < t; i++){
scanf("%d %d %d", &h, &w, &n);
if(n%h == 0)
printf("%d%02d\n", h, n/h);
else
printf("%d%02d\n", n%h, n/h + 1);
}
}
그대로 코드로 바꿨다.
맞았다! 다음에는 가장 작은 값 - 가장 큰 값처럼 경계에 있는 값들도 확인해봐야겠다.
이제 이 코드를 조건문으로 확인 안 하고 한줄로 짜고 싶었는데 어떻게 할지는 잘 모르겠다. 번호 구하는 건 나눠떨어지면 H, 안 나눠떨어지면 H + 1이라 올림으로 합칠 수 있을 것 같은데 앞의 층 수가 문제다. 그래서 그냥 이대로 뒀다.
여담이지만 백준 틀린거는 돌리자마자 알려주는데 맞는거는 한 5초정도 기다렸다가 알려준다. 빠른 실패 느린 성공
'백준' 카테고리의 다른 글
2965 캥거루 세마리 (0) | 2019.10.04 |
---|---|
10824 네 수 (0) | 2019.10.04 |
2455 지능형 기차 (0) | 2019.10.03 |
13458 시험 감독 (0) | 2019.10.03 |
2869 달팽이는 올라가고 싶다 (0) | 2019.10.03 |