학습장/Algorithm

1.1.1. 회전하면서 들어가는 5x5 배열 만들어보기

Shin Jaehyun 2018. 4. 18. 06:31
정처기 시험도 마치고, 프로젝트를 진행도 할 겸, 순서도를 그리고, coding하는 것도 계속 연습이 필요한 참에, 기왕이면 정보처리기사 시험 준비하면서 했던 것들을 넣어보면 어떨까? 하는 생각이 들었습니다. 
기초적인 것들부터 하나하나 순서도 그리는 것도 익숙해지고, 순서도를 보고 그 흐름대로 코딩하는 습관도 들이고 하면 좋겠더라고요. 

물론 오셔서 보시는 분들께 뭔가 도움이 될 수 있으면 그것도 좋을 것 같아 여러모로 좋은 취지로 해볼까 합니다. 아직 변수선언, 초기화, 이름 짓는 규칙에 대해서도 그렇고 여러모로 허술한게 많으니, 조언도 주시면 감사히 받구요. 

지난 2018년 제 1회 정보처리기사 실기 시험에서 출제되었던 문제부터 시작해서 하나하나 해볼까 합니다. 매일프로그래밍이나, codewar, programmerz도 좋은데, 굳이 이것부터 하려는 이유는.. 

            쉬워요...    Quiz 풀어보기에는 아직은 좀 생소한 단어들도 종종 나오곤 해서, 이걸 어떻게 접근해야 할지 모르겠던데, 그나마 정처기는 해봤으니까...ㅡ_ㅡ;

물론 이거 다 끝나는데 얼마 걸리지는 않을것 같고, 끝나면 바로 도전해보려고요. 일단은 순서도따로, 코딩 따로 하곤 했는지라, 다시 연결시킬 필요도 있었고, 그래서 시작해봤습니다.^^

Atom으로 할까, 다른 IDE를 쓸까 하다가 일단 급한대로 설치되어있는 Eclipse를 쓰기로 했습니다. 그래도 저도 공부한다고 하는건데 언제든 다른걸로 바꿔서 써보기도 하려고요.

시험 내에서 출제되었던 순서도 문제의 코딩입니다. (원래는 1씩 증가하는 수가 들어갔는데, 그것도 그냥 순서도 문제였고... 혹시나 해서 해봤어요. 그래도 하는김에 더 배우고 연습하면 좋죠....ㅠ.ㅠ)

public class Rotating_Numberodd { // 2018년 제 1회 정보처리기사 실기 달팽이 홀수로 만들어보기.
     public static void main(String[] args) {
           // 5x5 배열 안에 가운데로 회전하면서 늘어나는 숫자집어넣기.
           // 1.변수선언 및 초기화
           // 5x5 배열 arr[5,5]
           // 늘어날 숫자 num 1부터 3, 5, 7, 9 요렇게 들어갈거고..
           // 행, 열의 크기를 나타낼 숫자 low, col 행, 열 은 배열의 시작이 [0][0]이니까 0으로 두고... 시작만 -1줘야겠다.
           // 행, 열의 숫자를 증가 또는 감소시키기 위한 변수와 스위치 변수 add, sw. 행과 열이 늘어나거나 줄어드는 수는 1, 줄어들게 만드는건
           // sw -1을 곱해서 바꿔준다.
           // 숫자가 진행방향의 조건에 맞으면 방향을 바꾸도록 넣어줄 변수 turn

           int[][] arr = new int[5][5]; // 배열 선언 및 초기화
           int num, low, col, add, sw, turn;
           num = 1;   //1부터 입력되고 시작할겁니다. 조금 숫자를 바꾸면 -1로 시작해서 2씩 더하니까 상관은 없어요.
           low = 0;                        //열은 0부터 시작합니다. 배열의 시작이 [0][0] 부터 [4][4]니까
           col = -1;                        // 아래에 숫자를 1더하면서 시작해서 -1을 줬어요.
           add = 1;                           
           sw = -1;
           turn = 5;

           // 순서도를 그리고 시작하면 더 좋겠는데, 일단 치기시작했으니..ㅠ.ㅠ
           while (true) {
                for (int i = 1; i <= turn; i++) {
                     col = col + add;
                     arr[low][col] = num;
                     num = num + 2;
                }
                turn--;
                if (turn == 0)
                     break;
                for (int i = 1; i <= turn; i++) {
                     low = low + add;
                     arr[low][col] = num;
                     num = num + 2;
                }
                add *=sw;
           }
           for(int x=0;x<=4;x++) {
                for(int y=0;y<=4;y++) {
                     System.out.print("["+arr[x][y]+"]"+"\t");
                }
                System.out.println("");
                     
           }
     }
}

이렇게 하면 


회전하면서 5행5열의 배열속에 1부터 홀수로 증가하는 숫자가 완성됩니다.