백준 10250
내코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t;
scanf("%d", &t);
for (int m = 0; m < t; m++) {
int h, w, n;
scanf("%d %d %d", &h, &w, &n);
int** arr = malloc(sizeof(int*) * w);
for (int i = 0; i < w; i++) {
arr[i] = malloc(sizeof(int) * h);
}
int cnt = 1;
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
arr[i][j] = cnt;
cnt++;
}
}
int x, y;
for (int i = 0; i < w; i++) {
for (int j = 0; j < h; j++) {
if (arr[i][j] == n) {
y = j + 1;
x = i + 1;
break;
}
}
}
int result;
result = y * 100 + x;
printf("%d\n", result);
}
return 0;
}
호텔에서는 높이와 관계없이 호수가 작은 수부터 순서가 정해지기 때문에 arr[h][w]이런 형식으로 배열을 만들고 arr[0][0]=1, arr[0][1]=2, arr[0][2]=3이런식으로 값을 넣어주려고 했다. arr[h][w]인 배열을 만들기 위해 이차원배열에 동적할당을 하고 배열에 순서대로 1씩늘려가며 값을 넣어줬다. 그 후 반복문을 돌리며 n과 같은 값이 있는 배열의 인덱스+1들을 y와 x에 저장하고 출력형식으로 변환한 뒤 출력했다.
솔직히 너무 수학을 이용하지 않고 쉽게 푼 느낌이라 다른사람 코드를 살펴봤다.
<출처: https://mokhwasomssi.tistory.com/125 >
찾아보니 식을 이용해 문제를 푸는 방식이 있었다. 이 방법은 n이 h로 나누어 떨어지는경우와 그렇지 않은 경우로 나누어 풀 수 있다. 만약 n%h=0이라면 층수는 h, 호수는 n/h이다. 만약 n%h!=0이라면 층수는 n%h, 호수는 n/h+1이 된다. 따라서 이를 이용해 코드를 짜면 아래의 코드가 된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t;
scanf("%d", &t);
for (int i = 0; i < t; i++)
{
int h, w, n;
int x, y;
scanf("%d %d %d", &h, &w, &n);
int result;
if (n % h == 0) {
y = h;
x = n / h;
}
else {
y = n % h;
x = n / h + 1;
}
result = y * 100 + x;
printf("%d\n", result);
}
return 0;
}
'C' 카테고리의 다른 글
[C]백준 08.기본수학1: 2839 (0) | 2022.01.13 |
---|---|
[C]백준 08.기본수학1: 2775 (0) | 2022.01.13 |
[C]백준 08. 기본수학1: 2869 (0) | 2022.01.12 |
[C]백준 08.기본수학1: 1193 (0) | 2022.01.11 |
[C]백준 08.기본수학1: 2292 (0) | 2022.01.11 |