▶fill() 함수를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
제한사항
- 1 ≤ n ≤ 100
입출력 예 & 설명
입출력 예 #1
- 예제 1번의 n의 값은 3으로 다음과 같이 2차원 배열을 채울 수 있습니다.
따라서 [[1, 0, 0], [0, 1, 0], [0, 0, 1]]을 return 합니다.
입출력 예 #2
- 예제 2번의 n의 값은 6으로 다음과 같이 2차원 배열을 채울 수 있습니다.
따라서 [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]]을 return 합니다.
입출력 예 #3
- 예제 1번의 n의 값은 1이고 다음과 같이 2차원 배열을 채울 수 있습니다.
따라서 [[1]]을 return 합니다.
나의 풀이
먼저 2차원 배열을 만들어야 하기 때문에 겉의 배열을 먼저 선언을 해주었습니다.
그다음에 이중 for문을 사용하여 4번째 줄에서 n만큼 배열 안쪽 한 행을 생성해 줍니다.
위의 코드에서 볼 수 있듯이 n이 3일 경우에 i === j 일 때만 1이 들어가고, 첫 번 째 행이 완료되었을 때 2번째 행을 만들어주고 2번째 행이 끝났을 때 마지막 3번째 행을 만들어주고 0과 1을 넣어주어 마무리했습니다.
다른 풀이
다른 풀이에서는 fill() 함수를 사용해 보았습니다.
fill() 함수는 앞선 ▶fill() 함수 포스팅에서 보았듯이 배열을 같은 값으로 채우는 함수입니다. fill() 함수를 사용하여 2차원 배열을 선언해 주고, 똑같이 이중 for문을 사용했습니다.
여기서 주의해야 할 것은 fill() 함수는 value값이 참조타입(객체, 배열, 함수)이 전달된다면 참조값(값이 저장된 메모리 주소)이 저장됩니다.
그렇기 때문에 5번째 줄에서 다음 행을 초기화시켜주지 않는다면 위의 코드와 같이 값이 잘 들어가다가 마지막 행의 값의 메모리를 저장하기 때문에
마지막 배열이 저장이 됩니다. 따라서 2차원 배열을 fill() 함수를 사용해서 만들 때면 꼭 초기화를 하거나,
fill() 포스팅에서 알아보았 듯이 1차원 배열에 또 다른 배열 객체를 추가하여 2차원 배열 만드는 방법을 사용해야 합니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 세로 읽기 (JavaScript) (1) | 2024.01.27 |
---|---|
[프로그래머스] 배열 만들기 3 (2) | 2024.01.26 |
[프로그래머스] 문자열 바꿔서 찾기 (JavaScript) (2) | 2024.01.21 |
[프로그래머스] Lv0 0떼기 (JavaScript) (0) | 2024.01.20 |
[프로그래머스] Lv0 가까운 1 찾기 (JavaScript) (0) | 2024.01.20 |