Lv.2 n^2 배열 자르기

ujinujin·2022년 2월 8일
0

코딩테스트 뿌시기

목록 보기
50/57

🤖문제

👍🏻 2022년 2월 8일

처음코드

<script>
  function solution(n, left, right) {
      let emptyArr = new Array(n).fill().map((_,i) => Array(n))

      let num = 1;
      while (num <= n) {
          for (let i=0; i<n; i++) {
              for (let j=0; j<n; j++) {
                  emptyArr[i][j] = num;
                  emptyArr[j][i] = num;
              }
              num++            
          }
      } 
      return emptyArr.flat().slice(left, right+1);
  }
</script>

다시 짠 코드

<script>
  function solution(n, left, right) {
      let answer = [];
      let firstLine = parseInt(left/n);
      let lastLine= parseInt(right/n);

      let startNum = firstLine+1;
      for (let row=firstLine; row<=lastLine; row++){
          for (let i=0; i<startNum; i++) {
              answer.push(startNum);
          }
          let nextNum = startNum;
          for (let i=startNum; i<n; i++) {
              answer.push(++nextNum);
          }
          startNum++;
      }

      return answer.slice(left%n, left%n + (right-left+1));
  }
</script>

처음엔 n X n 크기의 2차원 배열을 만들어서 값을 넣고, 1차원 배열로 변환한 다음에 left, right에 맞게 잘랐다.

근데 이렇게 하니까 signal: aborted (core dumped) 에러가 났다.
제한사항 보면 n의 최대값이 10^7이라서 n X n 으로 만들면 크기가 너무 커져서 에러가 나는 것 같았다.

left ~ right에 해당하는 배열만 만든다면 더 완벽했겠지만 방법을 모르겠어서 그냥 left랑 right가 있는 row를 포함해서 그 사이의 row들의 값을 구하는 방식으로 다시 풀었다.

다행히 바로 100점 받았다~

profile
백수와 취준생 그 사이 어디

0개의 댓글