SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
다른 d2보단 좀 오래걸렸던 문제!예전에도 풀어본 적 있는 문제인데 갑자기 풀려니까 머리가 안굴러가더라,,,,ㅎㅎㅎ
반복문으로 풀었다!
그림을 그리면서 실제 배열에서 어떻게 계산할지 생각해보니까, down 방향과 up 방향으로 갈 때만 n의 크기가 줄어드는 것을 알 수 있었다.
1. 첫번째 시작 방향은 right, 입력받은 N의 크기 값을 n으로 두고,
2. up / down 방향으로 갈 때 , n의 크기를 -1씩 해줬다. right / left 방향은 방향 전환 및 cnt초기화만 해줌
3. 반복문의 횟수가 cnt == n의 크기와 같아지면 방향을 변경, 순서는 ( right → down → left → up )
✨ snail[y][x]에 대하여
right일때는 x+1
down일때는 y+1
left일때는 x-1
up일때는 y-1
#include <iostream>
using namespace std;
#define MAX 11
int main(int argc, char** argv)
{
int T;
cin >> T;
for(int t=0;t<T;t++){
int n;
cin >> n;
int snail[MAX][MAX] = {0,};
string direction = "right"; //첫 시작 방향 오른쪽
int x=-1, y=0;
int cnt = 0;
int N = n;
for(int i=1;i>=0;i++){
if(cnt == n && direction == "up"){
direction = "right";
cnt = 0;
} else if(cnt == n && direction == "right"){
direction = "down";
cnt = 0;
n--;
} else if(cnt == n && direction == "down"){
direction = "left";
cnt = 0;
} else if(cnt == n && direction == "left"){
direction = "up";
cnt = 0;
n--;
}
if(direction == "right") x++;
else if(direction == "left") x--;
else if(direction == "down" ) y++;
else if(direction == "up") y--;
snail[y][x] = i;
cnt++;
if(i == N*N) break;
}
//출력
cout << "#" << t+1 << "\n";
for(int i=0;i<N;i++){
for(int j=0;j<N;j++) {
cout << snail[i][j];
if(j != N-1) cout << " ";
}
cout << "\n";
}
}
return 0;
}
계속 오답이 나왔는데 이유를 모르겠어서,,, 다시 확인해보니 실수로 개행을 하나 더해버렸다. 😵
'코딩테스트 연습 > SWEA' 카테고리의 다른 글
[SWEA] 1961. 숫자 배열 회전 d2 (c++) (0) | 2022.05.24 |
---|---|
[SWEA] 1974. 스도쿠 검증 d2 (c++) (0) | 2022.05.23 |
[SWEA] 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 D2 (0) | 2022.05.23 |
[SWEA] 2005. 파스칼의 삼각형 D2 (c++) (0) | 2022.05.22 |
[SWEA] 1926. 간단한 369게임 D2 (c++) (0) | 2022.05.22 |