코드굽는 타자기
SWEA[1954] - 달팽이 숫자[D2] 본문
링크
SWEA[1954]
문제설명
- 달팽이 숫자[D2]
문제풀이
- 규칙성 찾는문제도 가능
- 시뮬레이션 문제도 가능
문제코드
import java.util.Scanner;
import java.io.FileInputStream;
import java.util.Arrays;
class Solution
{
public static void main(String args[]) throws Exception
{
//System.setIn(new FileInputStream("res/test.txt"));
int[][]dir = {{0,1},//우하좌상
{1,0},
{0,-1},
{-1,0}
};
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N=sc.nextInt();
int [][]map = new int[N][N];
int r=0;
int c=0;
int nr=0;
int nc=0;
int len = N-1;
int dir_= 0;
int cnt = 0;
while(cnt<N*N) {
map[r][c]=cnt+1;
nr = r + dir[dir_][0];
nc = c + dir[dir_][1];
if(nr>=0 && nr<N && nc>=0 && nc<N) {
if(map[nr][nc]!=0) {//숫자에부딪힌 경우
dir_ = (dir_+1)%4;
nr = r + dir[dir_][0];
nc = c + dir[dir_][1];
r = nr;
c = nc;
}else {
r = nr;
c = nc;
}
}else { //벽에부딪힌경우
dir_ = (dir_+1)%4;
nr = r + dir[dir_][0];
nc = c + dir[dir_][1];
r = nr;
c = nc;
}
cnt++;
}
System.out.println("#"+test_case);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.printf("%d ",map[i][j]);
}
System.out.println();
}
}
}
}
아쉬운점
- 규칙성 찾아서 시도 : length가 2씩 줄면서 출력하는구조
- for 문 여러개 쓸 때, loop탈출 힘들었음 break가 반복문 끝에있어서 탈출을 못한것 같음.
- 시뮬레이션으로 시도 : while문으로 지렁이가 직접 탐색하면서 자국남기는 방식이 좀더 쉬웠음
- while문 사용할 때 시간초과났었음(왜인지는 모르겠음)
- if else 상황별 행동 설정 꼼꼼히 못했음
잘한점
- 시뮬레이션으로 품
'알고리즘 > Simulation' 카테고리의 다른 글
SWEA[1873] - 상호의 배틀필드[D3] (0) | 2020.02.12 |
---|---|
SWEA[4014] - 활주로 건설 (0) | 2020.02.09 |
SWEA[4615] - 재미있는 오셀로 게임[D3] (0) | 2020.02.08 |
SWEA[5653] - 줄기세포배양 (0) | 2020.02.08 |
SWEA[5644] - 무선 충전기 (1) | 2020.02.06 |
Comments