danbibibi
article thumbnail
Published 2023. 12. 27. 00:09
BOJ 10157번: 자리배정 문제 풀이/백준

1. 문제

문제 바로가기> BOJ 10157번: 자리배정

 

10157번: 자리배정

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

www.acmicpc.net

 

2. 풀이

달팽이 모양을 그릴 수록 R, C 칸이 한칸씩 감소하는 성질을 이용하여 문제를 해결했다! 

<cpp />
#include<iostream> #include<vector> #define pii pair < int, int> using namespace std; int C, R, K; int dr[] = {1, 0, -1, 0}; // 상 우 하 좌 int dc[] = {0, 1, 0, -1}; void input(){ cin >> C >> R; cin >> K; } pii solve(){ if(C*R < K) return {0, 0}; // 좌석을 배정할 수 없는 경우 int c = 1, r = 0; int ccnt = 0, rcnt = -1, order = 1; for (int d = 0; ; d++){ d %= 4; // 상우하좌 반복 if(d==0 || d==2){ // 상하, r축 rcnt++; for (int i = 0; i < R - rcnt; i++){ r += dr[d]; if(order++ == K) return {c, r}; } } else{ // 좌우, c축 ccnt++; for (int i = 0; i < C - ccnt; i++){ c += dc[d]; if(order++ == K) return {c, r}; } } } } void output(pii res){ if(res.first == 0) cout << 0; else cout << res.first << " " << res.second; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); input(); output(solve()); }

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 9935번: 문자열 폭발  (0) 2024.01.05
BOJ 2666번: 벽장문의 이동  (0) 2024.01.03
BOJ 8983번: 사냥꾼  (0) 2023.12.22
BOJ 1079번: 쇠막대기  (0) 2023.12.15
BOJ 9047번: 6174  (0) 2023.12.11
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로