[JAVA][정올 1495] 대각선 지그재그

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. 마무리

    시작점이 일정한 규칙을 가지다가, 가운데 지점을 지나면서 규칙이 변한다.

    이럴 경우엔 윗 삼각형 / 아래 삼각형을 나누어서 생각하면 편하다.

     

    역시나 설계만 어느정도 해놓고 바로 깡코딩 들어가서 수정하느라 시간 많이 썼다...

    알고리즘적 사고를 갖추기 위해 더 아자아자 하자!

     

     

     

     

    반응형

    댓글

    Designed by JB FACTORY