Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 달팽이삼각형(JAVA) 본문
1337 : 달팽이삼각형
제한시간: 1Sec 메모리제한: 64mb
해결횟수: 409회 시도횟수: 762회
삼각형의 높이 N을 입력받아서 아래와 같이 숫자 0부터 달팽이 모양으로 차례대로 채워진 삼각형을 출력하는 프로그램을 작성하시오.
< 처리조건 >
왼쪽 위부터 시계방향으로 오른쪽 아래로 이동하면서 숫자 0부터 N개를 채우고 다시 왼쪽으로, 다음은 위쪽으로 반복하면서 채워 나간다. (숫자 9 다음에는 0부터 다시 시작한다.)
[Copy]6 | [Copy]0 4 1 3 5 2 2 0 6 3 1 9 8 7 4 0 9 8 7 6 5 |
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 | /************************************************************** Problem: 1337 User: a132034 Language: Java Result: Success Time:227 ms Memory:9700 kb ****************************************************************/ import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int [][] arr = new int [N][N]; int x = - 1 , y = - 1 ; int num = 0 ; for ( int i = 0 ; i < N; ++i) { for ( int j = i; j < N; ++j) { if (i% 3 == 0 ) { x++; y++; } else if (i% 3 == 1 ) { y--; } else if (i% 3 == 2 ) { x--; } arr[x][y] = (num++)% 10 ; } } for ( int i = 0 ; i < N; ++i) { for ( int j = 0 ; j < i+ 1 ; ++j) { System.out.print(arr[i][j]+ " " ); }System.out.println(); } } } |
처음 딱 보자마자.. 순서대로 출력으로 할지, 계속 위치를 바꾸어가며 할지 고민했는데, 한 5분 보다보니 이건 아무리 생각해도 뭔가 순서대로는 규칙이 보이지 않아서 결국 위치를 바꾸어가며 배열에 넣고, 순서대로 출력하였다.
방향에 따라 좌표를 노트에 써 보니 (6 기준)
0,0 -> 1,1 -> 2,2 -> 3,3 -> 4,4 -> 5,5 (대각선 내려가는 방향)
5,4 -> 5,3 -> 5,2 -> 5,1 -> 5,0 (밑변)
4,0 -> 3,0 -> 2,0 -> 1,0 (높이)
순서로 반복되는 것이 보였다.
반복되는 숫자는 계속 1씩 감소하였기 때문에 두번째 for loop에서 j가 i부터 시작하게 하도록 만들었다.
그리고 대각선 -> 밑변 -> 높이가 반복되므로 3으로 나눈 나머지에 따라 좌표의 이동을 하도록 만들었는데
대각선은 둘다 +1 , 밑변은 y만 -1 , 높이는 x만 -1 되도록 하였다.
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 카드게임(C++) (0) | 2016.05.22 |
---|---|
실력키우기 빙고(C++) (0) | 2016.05.21 |
실력키우기 파스칼삼각형(JAVA) (0) | 2016.05.16 |
실력키우기 숫자삼각형(JAVA) (0) | 2016.05.16 |
알고리즘 좋은수열(C++) (0) | 2016.05.16 |