문제 출처 : https://www.acmicpc.net/problem/10250
1. 코드
#include <stdio.h>
int main(void)
{
int t, h, w, n, i;
scanf("%d", &t);
for(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);
}
return 0;
}
2. 문제 해결 방식
이 문제는 문제 설명이 많이 길어서 문제를 이해하는 게 관건인 것 같다. 문제를 정리하면 엘리베이터에서 제일 가까운 방으로 사람들을 채우는데 N번째 사람은 몇 호실인지 알려주는 프로그램이다.
문제를 보면 아래층을 선호한다고 하고 엘리베이터랑 제일 가까워야 한다. 그렇다면 이러한 표가 완성이 될 것이다.
호 | 순서 | 호 | 순서 |
104호 | 4 | 204호 | 8 |
103호 | 3 | 203호 | 7 |
102호 | 2 | 202호 | 6 |
101호 | 1 | 201호 | 5 |
1부터 8까지 순차적으로 사람들이 각 호실을 차지하는 것이다. 문제를 이해했다면 반은 성공했다. 이제는 규칙을 파악하면 이 문제를 해결할 수 있다.
예제를 보면 6 12 10의 결과는 402로 나온다 그렇다면 0을 기준으로 수를 나눈다면 4와 2가 나온다. 10 % 6 = 4가 나온다. n % h이라는 식이 도출된다. 그리고 10 / 6 = 1이므로 여기서 1을 더한다면 2가 나오기 때문에 n / h + 1이라는 식이 나온다.
하지만 여기서 끝이 아니다. 만약 6 12 12와 같은 경우에는 12 % 6 = 0, 12 / 6 + 1 = 3이다. 그렇다면 003이라는 호수가 나오는데 이러한 호수는 존재하지 않기 때문에 n % h의 값이 0일 때는 수식을 조금 바꿔서 n % h ->h, n / h + 1 -> n /h로 수정한다. 그렇다면 답이 나오는지 확인해보자
h = 6, 12 / 6 = 2 이므로 602가 나온다. 그렇다면 정답도 확인했으니 이것을 이제 코드로 짜면 된다. 그런데 주의해야 할 점은 %d0%d로 출력하면 틀린다고 나와서 %d%02d로 출력을 해야 한다. 아마도 이건 추측인데 숫자만 맞게 인식을 시킨 것 같다.
3. 느낀 점
문제 설명에 비해 속 내용은 엄청나게 간단했다. 그래서 편안한 마음으로 편하게 풀었다. 이 문제는 압도적인 글자 수에 당황하지 않으면 될 것 같다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1011번: Fly me to the Alpha Centauri C언어 (0) | 2020.02.11 |
---|---|
백준 알고리즘 2775번: 부녀회장이 될테야 C언어 (4) | 2020.02.08 |
백준 알고리즘 2869번: 달팽이는 올라가고 싶다 C언어 (0) | 2020.02.06 |
백준 알고리즘 4673번: 셀프 넘버 C언어 (개선) (0) | 2020.02.05 |
백준 알고리즘 1193번: 분수찾기 C언어 (8) | 2020.01.31 |