본문 바로가기
C

[C]백준 08.기본수학1: 10250

by 열지희공 2022. 1. 12.

백준 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