[JAVA][정올 1495] 대각선 지그재그
- 알고리즘
- 2020. 12. 29.
SHORTCUT
반응형
사이트명 | 정올 |
문제 링크 | jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=767&sca=2020 |
주요 알고리즘 | #구현 |
사용 언어 | Java |
설명이 장황합니다.. 도움되는 것만 파악하세요 :-) |
1. 문제
2. 입력 / 출력
3. 풀이
3-1. 생각 노트
행(= 커서)이 바뀌는 걸 바깥 for문으로
안에 하나씩 증감하며 옮기는 줄 부분은 c라는 변수로 횟수 카운트!
배열에 접근하는 변수 [i][j] 를 변수값의 변화에 따라 접근시킬지
맨 처음엔 1번, 그담엔 2번, 3번 ... 하는 횟수에 따라 접근시킬지를 정해야 한다..?
3-2. 변수명
type | 변수명 | 설명 |
int[][] | arr | 결과값 |
int | text | 내부에 숫자를 기록하기 위한 변수 |
int | cnt | 몇 번 째로 체크하는지, 횟수를 카운트하기 위한 변수! 시작점으로 부터 +1 / -1 이 반복되어 적용됨. |
int | c | 첫 대각선에선 1번 / 두번째 대각선 2번 / ... 5번째 대각선 5번 / 6번째 대각선 다시 4번 ... 이걸 기록하기 위한 횟수 기록용 카운트 변수 |
3-3. 코드 보기
package jungol;
import java.util.Scanner;
public class JO1495_대각선지그재그 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] arr = new int[N][N];
int text = 1;
// 윗 삼각형
for (int i = 0; i < N; i++) { //커서 옮기는 역할
int cnt = 0;
//홀수
if(i%2 != 0) {
for (int c = 0; c < i+1; c++) { //내부 반복횟수
arr[i-cnt][0+cnt] = text++;
cnt++;
}
//짝수
}else {
for (int c = 0; c < i+1; c++) {
arr[0+cnt][i-cnt] = text++;
cnt++;
}
}
}
// 아래 삼각형
for (int i = 1; i <= N-1; i++) { //커서 옮기는 역할(줄바꾸기)
int cnt = 0;
//홀수
if((i + N-1)%2 != 0) {
for (int c = i; c < N; c++) { //내부 반복횟수
arr[N-1-cnt][i+cnt] = text++;
cnt++;
}
//짝수
}else {
for (int c = i; c < N; c++) {
arr[i+cnt][N-1-cnt] = text++;
cnt++;
}
}
}
//출력
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
3-4. 마무리
시작점이 일정한 규칙을 가지다가, 가운데 지점을 지나면서 규칙이 변한다.
이럴 경우엔 윗 삼각형 / 아래 삼각형을 나누어서 생각하면 편하다.
역시나 설계만 어느정도 해놓고 바로 깡코딩 들어가서 수정하느라 시간 많이 썼다...
알고리즘적 사고를 갖추기 위해 더 아자아자 하자!
반응형