반응형
구현문제였습니다.
풀이방법
1. (n/2, n/2) = 1로 시작합니다.
2. cnt가 n*n될때까지 cnt를 1씩 증가시켜주면서 방향을 전환해줍니다. 한 변을 채운다는 느낌으로 선언한 a배열에 cnt를 저장해주시면됩니다. 한 변을 채우고 나면 dir변수를 바꿔서 방향을 전환해줍니다.
Code
#include <iostream>
using namespace std;
int n, x, y, dir, findNum, cnt = 1, piv = 1;
int a[1001][1001];
void print(){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++)
cout << a[i][j] << ' ';
cout << '\n';
}
}
int main(){
cin >> n >> findNum;
x = n/2;
y = n/2;
a[x][y] = 1;
while(cnt < n*n){
if(dir == 0){
for(int k = 0; k < piv; k++){
a[--x][y] = ++cnt;
if(cnt == n*n) break;
}
}
else if(dir == 1){
for(int k = 0; k < piv; k++) a[x][++y] = ++cnt;
piv++;
}
else if(dir == 2){
for(int k = 0; k < piv; k++) a[++x][y] = ++cnt;
}
else if(dir == 3){
for(int k = 0; k < piv; k++)
a[x][--y] = ++cnt;
piv++;
}
dir = (dir+1)%4;
}
print();
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(a[i][j] == findNum) {
cout << i + 1 << ' ' << j + 1;
break;
}
}
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 14499번 : 주사위 굴리기 (0) | 2021.04.23 |
---|---|
(C++) - 백준(BOJ) 20056번 : 마법사 상어와 파이어볼 (0) | 2021.04.20 |
(C++) - 백준(BOJ) 17144번 : 미세먼지 안녕! (0) | 2021.04.15 |
(C++) - 백준(BOJ) 3190번 : 뱀 (0) | 2021.04.09 |
(C++) - 프로그래머스(2019 KAKAO BLIND RECRUITMENT) : 실패율 (0) | 2021.04.08 |