알고리즘

프로그래머스 n^2 배열 자르기 (JAVA)

박카스마시며코딩 2022. 5. 31. 14:30

https://programmers.co.kr/learn/courses/30/lessons/87390

 

코딩테스트 연습 - n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부

programmers.co.kr

 

저는 구현을 통해서 문제를 해결하였습니다.

저는 배열을 만들고 자르고 하지 않고 규칙을 찾아서 문제를 해결하였습니다.

각각의 값이 0,0과 얼마나 떨어져 있냐라기 보다는 행과 열중에 큰 값에 따라 배열 안의 값이 결정 된다는 것을 찾았습니다.

이를 통해 left와 right의 좌표를 찾고 left에서 right까지 가는데 까지의 값을 구하고 이를 결과값에 넣어 문제를 해결하였습니다.

 

 

import java.util.*;
class Solution {
    public int[] solution(int n, long left, long right) {
        int grap = (int)(right - left);
        int[] answer = new int[grap + 1];
        long startY = left / n;
        long startX = left % n;
        long endY = right / n;
        long endX = right % n;
        long[] start = new long[] {startY,startX};
        int index = 0;
        while(true){
            answer[index++] = findValue(start,n); 
            if(start[0] ==endY && start[1] == endX){
                break;
            }
            nextPosition(start,n);
        }
        return answer;
    }
    private void nextPosition(long[] position,int n){
        position[1]++;
        if(position[1] >= n){
            position[1] = 0;
            position[0]++;
        }
    }
    private int findValue(long[] position,int n){
        int value = (int)Math.max(position[0],position[1]);
        return value + 1;
    }
}