Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 숫자삼각형(JAVA) 본문
1641 : 숫자삼각형
제한시간: 1Sec 메모리제한: 64mb
해결횟수: 661회 시도횟수: 1922회
삼각형의 높이 n과 종류 m을 입력받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오.
< 처리조건 >
종류 1번의 숫자의 진행 순서는 처음에 왼쪽에서 오른쪽으로 진행 한 후 방향을 바꾸어서 이를 반복한다.
[Copy]7 3 | [Copy]1 1 2 1 2 3 1 2 3 4 1 2 3 1 2 1 |
[Copy]3 2 | [Copy]0 0 0 0 0 1 1 1 2 |
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 | /************************************************************** Problem: 1641 User: a132034 Language: Java Result: Success Time:198 ms Memory:9396 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 M = sc.nextInt(); if (N % 2 == 0 || N > 100 || N < 1 ){ System.out.println( "INPUT ERROR!" ); return ; } if (M == 1 ){ int k = 0 ; for ( int i = 1 ; i <= N; ++i) { if (i% 2 == 0 ) k += i; for ( int j = 0 ; j < i; ++j) { if (i% 2 == 0 ){ System.out.print(k-j + " " ); } else { System.out.print(++k + " " ); } } System.out.println(); } } else if (M == 2 ){ int k = 0 ; for ( int i = 0 ; i < N; ++i) { for ( int j = 0 ; j < i* 2 ; ++j) System.out.print( " " ); for ( int j = i* 2 ; j < 2 *N- 1 ; ++j) System.out.print(k + " " ); System.out.println(); k++; } } else if (M == 3 ){ for ( int i = 0 ; i < N/ 2 + 1 ; ++i) { for ( int j = 1 ; j <= i + 1 ; ++j ) { System.out.print(j + " " ); } System.out.println(); } for ( int i = N/ 2 - 1 ; i >= 0 ; --i) { for ( int j = 1 ; j <= i + 1 ; ++j ) { System.out.print(j + " " ); } System.out.println(); } } else { System.out.println( "INPUT ERROR!" ); return ; } } } |
2번과 3번은 크게 어렵지 않았다.
보자마자 바로 풀릴정도로 쉬웠는데
1번같은 경우 수첩에 써보지 않고서는 알듯 말듯 몇번씩 생각과 다른 값이 나왔다.
1번의 경우
1
3 2
4 5 6
10 9 8 7
... 순서로 되는데
짝수 번째에서는 반대로 증가하게 된다.
사실 배열같은데 넣어주어 반대로 출력하면 엄청 쉽겠다고 생각했으나, 그런 방법 말고도 바로 풀 수 있을 방법이 있겠다 싶어
더 생각해보았다.
우선 모든 줄의 가장 큰 값은
1 -> 3 -> 6 -> 10 순서로 라인 번호를 더해준 것과 동일하다는 것을 알았다.
>> 1 (1+2) (1+2+3) (1+2+3+4)
이를 이용해서 짝수번째는 라인 번호를 더해 주었고, 홀수 번째는 그대로 증가시켜 주었다.
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 달팽이삼각형(JAVA) (5) | 2016.05.17 |
---|---|
실력키우기 파스칼삼각형(JAVA) (0) | 2016.05.16 |
알고리즘 좋은수열(C++) (0) | 2016.05.16 |
실력키우기 최대공약수와 최소공배수(C++) (0) | 2016.05.14 |
실력키우기 마방진(JAVA) (0) | 2016.05.13 |