[JAVA][정올 1641] 숫자삼각형
- 알고리즘
- 2020. 12. 21.
SHORTCUT
반응형
사이트명 | 정올 |
문제 링크 | jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=914&sca=2020 |
주요 알고리즘 | #for #구현 |
사용 언어 | Java |
설명이 장황합니다.. 도움되는 것만 파악하세요 :-) |
1. 문제
2. 입력 / 출력
3. 풀이
3-1. 생각 노트
2번과 3번의 경우, 시작 점이 어디인지를 파악하고 그 후에 몇 회 실행시키는지를 결정한다.
둘다 시작점이 (0,0) -> (1,1) -> (2,2) -> ... 이고, 그 때를 기준으로 5회 -> 3회 -> 1회 식으로 줄어든다.
이걸 카운트하기 위해, for문 안에 int c를 선언해서 사용한다.
3-2. 변수명
type | 변수명 | 설명 |
int[][] | arr | 결과값을 넣는 배열 -> 나중에 출력해서 최종 정답 |
int | j | for문 내에서 배열 위치를 이동하기 위한 변수 |
int | c | 횟수 카운트용 변수 |
3-3. 코드 보기
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();
// n 홀수, 1 <= n <=99, 1 <= m <= 3 외 전부 에러 처리
if (n % 2 == 0 || n < 1 || n >= 100 || m < 1 || m > 3) {
System.out.println("INPUT ERROR!");
return;
}
int[][] arr = new int[n][n];
int cnt = 1;
switch (m) {
case 1:
for (int i = 0; i < n; i++) {
if (i % 2 == 1) { // 홀수
for (int j = i; j >= 0; j--) {
arr[i][j] = cnt++;
}
} else { // 짝수
for (int j = 0; j <= i; j++) {
arr[i][j] = cnt++;
}
}
}
break;
case 2:
int until = n + n / 2 * 2;
arr = new int[n][until];
for (int i = 0; i < n; i++) {
for (int j = i, c = 1; c <= until; j++, c++) { // c : 횟수로 처리하기 위함
arr[i][j] = i;
}
until -= 2;
}
break;
case 3:
int until2 = n;
arr = new int[n][n - n/2];
for (int j = 0; j < n - n/2; j++) {
for (int i = j, c = 1; c <= until2; i++, c++) { // c : 횟수로 처리하기 위함
arr[i][j] = j+1;
}
until2 -= 2;
}
break;
}// end-switch
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(m == 2 && i == 0) {
System.out.print(arr[i][j] + " ");
continue;
}else {
if (arr[i][j] == 0) {
System.out.print(" " + " ");
continue;
}
}
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
3-4. 마무리
int[][] 의 경우 기본적으로 0으로 초기화 되어 있는데, 결과값에선 공백으로 나와있다..
그리고 특이하게 2번 케이스에서만 0을 출력한다.. 쉽게 생각했는데, 은근히 까다로웠다.. 이거 처리하는게 좀 귀찮았다.
일단 배열에 순서대로 수를 넣고, 그걸 출력하는 형식으로 코딩했다.
근데 다른 문제 힌트를 보다가, "아! 배열에 넣고, 출력 순서만 바꿔도 되겠구나?" 하는 생각이 들었다.
나중에 다른 분 코드 참고해서 수정해봐야겠다..!
반응형