자바 알고리즘 문제

정수를 나선형으로 배치하기

쿠키키키키 2024. 4. 16. 14:25

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요. 

 

 


import java.util.Arrays;

class Solution {
    public static void main(String[] args) {
        int[][] e = solution(4);

        for (int i = 0; i < e.length; i++) {
            System.out.println(Arrays.toString(e[i]));
        }
    }

    public static int[][] solution(int n) {
        int[][] answer = new int[n][n];
        boolean ing = true;
        String way="right";
        int num=1;
        int x=0;
        int y=0;
        while(ing){
            if(way.equals("right")){
                answer[x][y]=num;
                y++;
                if(y>=n){
                    way="down";
                    x++;
                    y--;
                }else if(answer[x][y]!=0){
                    y--;
                    x++;
                    way="down";
                }
            }
            else if(way.equals("down")){
                answer[x][y]=num;
                x++;
                if(x>=n){
                    way="left";
                    x--;
                    y--;
                }else if(answer[x][y]!=0){
                    x--;
                    y--;
                    way="left";
                }
            }
            else if(way.equals("left")){
                answer[x][y]=num;
                y--;
                if(y<0){
                    way="up";
                    y++;
                    x--;
                }else if(answer[x][y]!=0){
                    y++; x--;
                    way="up";
                }
            }
            else if(way.equals("up")){
                answer[x][y]=num;
                x--;
                if(x<0){
                    way="right";
                    x++;
                    y++;
                }else if(answer[x][y]!=0){
                    x++; y++;
                    way="right";
                }
            }
            num++;
            if(num>n*n){
                ing=false;
            }

        }
        return answer;
    }
}

 

첨에 어떻게 풀어야할지 감이 안잡혔다가  이번 문제는 특이하기 ai 에게 코드 피드백을 받을수 있는 기능이 있어

빈값으로 제출하고 피드백을 받아봤다. 

그래서 ai 가 방향 변수를 설정하고  x,y 축으로 풀어보라길래 

와 역시 ai 천재인가 생각하고 바로 그 방식 대로 way 변수를설정하고 while 문안에서 규칙적으로 상하좌우로

계속 움직이게 했다 .   그리고 배열이 끝나는 경우 , 다른 수가 있는 경우 일때 방향이 바뀌게 해줬다. 

그랬더니 간단하게 답이 나왔다!  

'자바 알고리즘 문제' 카테고리의 다른 글

중복된 문자 제거  (0) 2024.04.23
문자열 정렬하기 (1)  (0) 2024.04.20
평행  (0) 2024.04.13
겹치는 선분의 길이 (10번 테스트만 실패) 도와주실분?  (0) 2024.04.12
주사위 게임 3  (0) 2024.04.11