Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 대각선 지그재그(JAVA) 본문
1495 : 대각선 지그재그
제한시간: 1Sec 메모리제한: 64mb
해결횟수: 974회 시도횟수: 1827회
정사각형의 크기를 입력 받은 후 대각선으로 지그재그 형태인 다음과 같은 형태로 출력하는 프로그램을 작성하시오.
< 처리조건 >
(1) 가장 왼쪽 위의 좌표부터 차례로 숫자를 대입시킨다.
(2) 대각선을 기준으로 계속 지그재그 모양으로 채워져야 하며 숫자는 1씩 증가하는 형태로 채워나가야 한다.
[Copy]3 | [Copy]1 3 4 2 5 8 6 7 9 |
[Copy]2 | [Copy]1 3 2 4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /************************************************************** Problem: 1495 User: a132034 Language: Java Result: Success Time:220 ms Memory:10356 kb ****************************************************************/ import java.util.Scanner; public class Main { @SuppressWarnings ( "resource" ) public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int [][] map = new int [N][N]; map[ 0 ][ 0 ] = 1 ; map[N- 1 ][N- 1 ] = N*N; int x = 1 , y = 0 ; int c = 2 ; for ( int i = 1 ; i < N; ++i) { map[x][y] = c++; for ( int j = 0 ; j < i; ++j) { if (i% 2 != 0 ) { x--; y++; } else { x++; y--; } map[x][y] = c++; } if (i% 2 != 0 ) y++; else x++; } if (x != 0 ){ x--; y++; } else { x++; y--; } for ( int i = N- 2 ; i > 0 ; --i) { map[x][y] = c++; for ( int j = 0 ; j < i; ++j) { if (i% 2 != 0 ) { x--; y++; } else { x++; y--; } map[x][y] = c++; } if (i% 2 != 0 ) x++; else y++; } for ( int i = 0 ; i < N; ++i) { for ( int j = 0 ; j < N; ++j) { System.out.print(map[i][j]+ " " ); }System.out.println(); } } } |
배열에 먼저 값을 넣어주고 출력하는 방법을 사용했다.
값을 넣어주는 방법은 두 가지로 나누어 대각선 ( / 방향 )으로 늘어나는 구간 (총 1개~N개까지)
과 줄어드는 구간 (N~1개 까지)로 나누었고
각각 패턴을 그려보니
0,0
-> 1,0 -> 0,1
-> 0,2 -> 1,1 -> 2,0
-> 3,0 -> 2,1 -> 1,2 -> 0,3...
순서로 x + y의 합은 줄 번호와 같으며 시작이 X, 0 이라면 1씩 x -> y로 옮겨지며 0, X까지 이동, 반대의 경우도 같다.
더 간단하게 풀 수 있는 방법이 있을 것 같으나 종이에 그리고 생각한대로 바로 풀었다.
구현하다 보니 0,0번째와 n-1,n-1번째는 그냥 넣어주는게 더 편해보여서 시작할 때 값을 넣어주었다.
'PARK > ALGORITHM' 카테고리의 다른 글
문제은행 강아지와 병아리(C++) (0) | 2016.04.13 |
---|---|
문제은행 두 정수 더하기(A+B)(C++) (0) | 2016.04.13 |
실력키우기 문자삼각형1(JAVA) (0) | 2016.04.12 |
알고리즘 저글링 방사능 오염(JAVA) (0) | 2016.04.12 |
실력키우기 달팽이사각형(C++) (0) | 2016.04.12 |