n^2 배열 자르기

Y b·2024년 2월 27일

문제

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.

n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.

과정

for 중첩 및 배열 구성을 위해 concat을 이용하려 했지만
실패로 인해 배열의 패턴을 고려해보았지만 실패했다.
알고리즘 공부의 방향성을 바꿔야겠다.

    var answer = [];
    while(left<=right){
        answer.push(Math.max(Math.floor(left /n), left % n) + 1);
        left++;
    }
    return answer;
}

예를 들어 left가 3이고 right가 5, n이 3이라면
left를 n으로 나눈 몫은 left가 몇번째 행에 있는지 확인할 수 있으며
나머지는 몇번째 열에 있는지 확인할 수 있습니다.
left와 right가 같아질 때 주어진 행과 열이 끝나기 때문에
끝이 나게 됩니다.

원리를 알고 보면 쉽지만
직관적으로 배열을 구하려고 하면 어려워지므로
형태를 구하기보다는 답을 어떻게 더 빠르고 효율적으로 구할지 고민해보도록 할 예정입니다.

profile
웹 개발자

0개의 댓글