코딩 테스트/프로그래머스(LV2)

[프로그래머스] n^2 배열 자르기 (LV2 - JavaScript)

dev-hpk 2024. 11. 10. 13:30
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 문제

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

  1. n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
  2. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
    • 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
  3. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
  4. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.

정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ n ≤ 10^7
  • 0 ≤ left ≤ right < n^2
  • right - left < 10^5

입출력 예

n left right result
3 2 5 [3,2,2,3]
4 7 14 [4,3,3,3,4,4,4,4]

 

입출력 예 설명

입출력 예 #1
다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.



입출력 예 #2

다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.

 

2. 오답

런타임 에러...😥

1 ≤ n ≤ 10^7 조건 생각해 보면 10^7 * 10^7 배열을 만들려면 런타임 에러 발생하는 게 당연해 보인다.

function solution(n, left, right) {
	// n * n 배열 생성
    const arr = Array.from({ length: n * n }, (_,index) => {
    	// Math.ceil((index + 1) : 행
        // index % n + 1 : 열
        // 행, 열 중 큰 값을 배열의 요소로 할당
        return Math.max(Math.ceil((index + 1) / n), index % n + 1);
    });
    
    // arr[left] ~ arr[right+1]까지 슬라이싱
    return arr.slice(left, right+1);
}

 

3. 정답 풀이

풀이 전략

  • 배열을 만든 후 필요한 만큼 슬라이싱 하지 않고 처음부터 필요한 길이의 배열을 생성
function solution(n, left, right) {
    // rigth - left + 1 : 리턴할 배열의 길이
    const arr = Array.from({ length: right - left + 1 }, (_,index) => {
        // Math.ceil((index + left + 1) / n : 행
        // (index + left) % n + 1 : 열
        // 행, 열 중 더 큰 값을 리턴
        return Math.max(Math.ceil((index + left + 1) / n), (index + left) % n + 1);
    });
    
    return arr
}

 

 

 

느낀 점

  • 제한 사항 꼼꼼히 읽고 런타임 에러 고려하면서 알고리즘 풀자.
  • 반복문 작성하거나 메서드 사용할 때 시간 복잡도 고려하면서 사용하자.
 

 

 

[프로그래머스] 멀리 뛰기 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 문제효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸,

dev-hpk.tistory.com

 

 

[프로그래머스] 구명보트 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 문제무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니

dev-hpk.tistory.com