728x90
D2라고 얕봤다 + 빨리 풀려고하니까 실수가 는다. 10분이면 풀줄알았는데.. error가 자꾸 떠서 30분은 걸렸다ㅠ
*다짜고짜 코딩하지 말고 대충 적어놓고 하자.*
*언제 멈춰야하는지 확실히 하자.*
*out of range가 발생할 수 있는 곳을 천천히 꼼꼼하게 파악하자.*
더보기
#include<iostream>
#include<vector>
using namespace std;
int main(){
// 오른쪽 아래 왼쪽 위 순서대로
vector<int> dx = {0, 1, 0, -1};
vector<int> dy = {1, 0, -1, 0};
int tc;
cin >> tc;
for(int t = 0; t < tc; t++){
int N;
cin >> N;
vector<vector<int>> snails(N, vector<int>(N, 0));
int x = 0, y = 0, dir = 0;
for(int i=1; i<N*N+1; i++){
snails[x][y] = i;
if(i == N*N) break;
while(x+dx[dir] >= N || y+dy[dir] >= N || x+dx[dir] < 0 || y+dy[dir] < 0 || snails[x+dx[dir]][y+dy[dir]] != 0)
dir = (dir+1)%4;
x = x+dx[dir];
y = y+dy[dir];
}
cout << "#" << t+1 << endl;
for(vector<int> vec: snails){
for(int snail: vec){
cout<<snail<<" ";
}
cout<<endl;
}
}
}
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
728x90
[접근1]
오른쪽 아래 왼쪽 위 순서대로 이동하므로 이동 방향이 담긴 좌표를 만들어준다.
vector<int> dx = {0, 1, 0, -1};
vector<int> dy = {1, 0, -1, 0};
[접근2]
입력받은 N의 크기만큼 snails vector를 초기화해주고, 시작 위치는 0,0 direction 방향도 0으로 설정해준다.
vector<vector<int>> snails(N, vector<int>(N, 0));
int x = 0, y = 0, dir = 0;
[접근3]
snail 2D vector를 돌면서 x, y위치에 번호를 넣어준다.
만약 N*N까지 번호를 다 넣었다면 break를 해준다.
다음 위치로 이동하기 위해, dir를 설정해줘야한다.
만약 dir방향으로 나아갔을때, vector 범위를 벗어나거나, 해당위치가 이미 번호를 부여받았다면 이동 방향을 바꾼다.
dir가 정해졌다면 x, y를 재설정해준다.
for(int i=1; i<N*N+1; i++){
snails[x][y] = i;
if(i == N*N) break;
while(x+dx[dir] >= N || y+dy[dir] >= N || x+dx[dir] < 0 || y+dy[dir] < 0 || snails[x+dx[dir]][y+dy[dir]] != 0)
dir = (dir+1)%4;
x = x+dx[dir];
y = y+dy[dir];
}728x90
'coding > algorithm' 카테고리의 다른 글
| [programmers] Lv.2 타겟 넘버(c++) (0) | 2022.05.24 |
|---|---|
| [SW Expert Academy] D2 1926. 간단한 369게임 (0) | 2022.05.24 |
| [SW Expert Academy] D3 1208. Flatten (0) | 2022.05.23 |
| [백준/baekjoon] Silver3 2606. 바이러스 (0) | 2022.05.23 |
| [SW Expert Academy] D3 1244. 최대 상금 (0) | 2022.05.23 |
댓글