본문 바로가기
전공공부/코딩테스트

(c++) 백준 "10157. 자리배정"

by 시아나 2022. 5. 1.

https://www.acmicpc.net/problem/10157

 

10157번: 자리배정

첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다.

www.acmicpc.net


나의 풀이

#include <iostream>
#include <vector>

using namespace std;
int M,N,K;
vector<pair<int, int>> heighWay = { {1,0},{-1,0} };
vector<pair<int, int>> lengthWay = { {0,1},{0,-1},{-1,0} };

void solution() {
	if (K > M * N) {
		cout << 0 << endl;
		return;
	}
	int num = 0;
	while (K > 0) {
		for (int i = 1; i < N - (num*2); i++) { //위
			if (--K <= 0) {
				cout << num + 1  << " " << num + i << endl;
				return;
			}
		}
		for (int i = 1; i < M - (num * 2); i++) { //오른쪽
			if (--K <= 0) {
				cout << num+i << " " <<N-num << endl;
				return;
			}
		}
		for (int i = 0; i < N -1 - (num * 2); i++) { //아래
			if (--K <= 0) {
				cout << M-num << " " << N-num-i << endl;
				return;
			}
		}
		for (int i = 0; i < M - 1 - (num * 2); i++) { //왼쪽
			if (--K <= 0) {
				cout << M-num-i << " " << num+1 << endl;
				return;
			}
		}
		num++;
	}
}

int main() {
	cin >> M >> N;
	cin >> K;
	solution();
	return 0;
}