[프로그래머스][JS] n^2 배열 자르기

2023. 9. 19. 13:40·IT/BOJ 문제정리

문제 설명

정수 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 ≤ 107
  • 0 ≤ left ≤ right < n2
  • right - left < 105

솔루션1: 단순 구현(실패)

function solution(n, left, right) {
    const answer = [];
    const arr = [];

    for (let i = 0; i < n; i++) {
        const row = [];
        for (let j = 0; j < n; j++) {
            row.push(Math.max(i, j)+1);
        }
        arr.push(row);
    }

    const sx = left%n;
    const sy = Math.floor(left/n);
    const ex = right%n;
    const ey = Math.floor(right/n);

    answer.push(...arr[sy].slice(sx, n));
    for (let i = sy+1; i < ey; i++) {
        answer.push(...arr[i]);

    }
    answer.push(...arr[ey].slice(0, ex+1));

    return answer;
}
  • 좌표 (r, c)에서의 값은 max(r, c) +1이다.
  • 이걸 알아낸 것까지는 좋았는데 몇몇 테스트케이스에서 이차원 배열을 일차원 배열로 변경하고 하는데서 에러가 터지면서 실패한다.

signal: aborted(core dumped)

솔루션2: 단순 구현 최적화(성공)

function solution(n, left, right) {
    const answer = [];
    let i = left;
    while (i <= right) {
        answer.push(Math.max(i%n, Math.floor(i/n))+1);
        i++;
    }

    return answer;
}
  • 공략 블로그
  • 이차원 배열을 만들고 일차원 배열로 변경할 필요도 없이 그냥 바로 answer에 담아버리면 된다.
  • 생각보다 간단해서 허탈했다.

'IT > BOJ 문제정리' 카테고리의 다른 글

[복기] 12865번: 평범한 배낭  (0) 2023.11.21
[프로그래머스][Python] 두 큐의 합 같게 만들기  (1) 2023.11.14
[프로그래머스][JS] 할인 행사  (0) 2023.09.18
[프로그래머스][JS] N개의 최소공배수  (0) 2023.09.13
[프로그래머스][JS] 피보나치 수  (1) 2023.09.09
'IT/BOJ 문제정리' 카테고리의 다른 글
  • [복기] 12865번: 평범한 배낭
  • [프로그래머스][Python] 두 큐의 합 같게 만들기
  • [프로그래머스][JS] 할인 행사
  • [프로그래머스][JS] N개의 최소공배수
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (572)
      • 혼잣말 (87)
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (167)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (38)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    졸업과제
    pintos
    부산대
    JavaScript
    MailBadara
    머신러닝
    react
    docker
    글리치해커톤
    Pint OS
    프로그래머스
    RNN
    리액트
    NEAR Protocol
    딥러닝
    크래프톤정글
    니어프로토콜
    Flutter
    사이드프로젝트
    OS
    자바스크립트
    알고리즘
    블록체인
    해커톤
    핀토스
    코드프레소
    numpy
    파이썬
    나만무
    위상정렬
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[프로그래머스][JS] n^2 배열 자르기
상단으로

티스토리툴바