Notice
Recent Posts
Recent Comments
Link
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)
이를 이용해서 짝수번째는 라인 번호를 더해 주었고, 홀수 번째는 그대로 증가시켜 주었다.
반응형
'IT > 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 |
