https://www.acmicpc.net/problem/10157
문제부터 간단하게 설명하면, 빙글빙글 돌게 사람들을 배치해서 내가 찾고자 하는 관객이 어떤 좌표에 배정이 되는지를 구하는 문제입니다.
<Solution>
좌표가 헷갈리게 되어 있으므로 기본적인 행렬처럼 변환 했다고 가정하고 문제를 해결하면 됩니다.
코드는 아래와 같습니다.
#include <iostream>
using namespace std;
int C, R, K;
void InputData(){
cin >> C >> R >> K;
}
int visited[1000+10][1000+10];
int returnR, returnC;
struct RC{
int r, c;
};
int d_row[] = {0, 1, 0, -1};// right, down, left, up
int d_col[] = {1, 0, -1, 0};
struct RC sol(){
int r, c;
r = 1; c=1;
int k = 1;
int index = 0;
int new_r, new_c;
while(k <= C*R){
// cout << 'r' << r << endl;
// cout << 'c' << c << endl;
if(k == K){
struct RC m = {r, c};
return m;
}
if(!visited[r][c]) visited[r][c] = 1;
new_r = r+d_row[index];
new_c = c+d_col[index];
if(new_r <=0||new_c <= 0 || new_r>C || new_c>R || visited[new_r][new_c]){
index = (index+1)%4;
new_r = r+d_row[index];
new_c= c+d_col[index];
}
r= new_r; c= new_c;
k++;
}
struct RC m_ = {-1,-1};
return m_;
}
int main(){
InputData();
struct RC ans = sol();
if(ans.c == -1){
cout << 0 << endl;
}
else{
cout << ans.r << ' ' << ans.c << endl;
}
return 0;
}
반응형
'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글
[백준] 연속부분최대곱 (0) | 2022.11.27 |
---|---|
[백준] 빙고 (0) | 2022.11.27 |
[백준] 싸이클 (0) | 2022.11.27 |
[정올] 숫자근(Digit Root) (0) | 2022.11.27 |
[정올] 폭탄돌리기 (VOLIM) (0) | 2022.11.27 |