https://school.programmers.co.kr/learn/courses/30/lessons/181830
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정사각형으로 만들기
문제 설명
이차원 정수 배열 arr이 매개변수로 주어집니다. arr의 행의 수가 더 많다면 열의 수가 행의 수와 같아지도록 각 행의 끝에 0을 추가하고, 열의 수가 더 많다면 행의 수가 열의 수와 같아지도록 각 열의 끝에 0을 추가한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 100
- 1 ≤ arr의 원소의 길이 ≤ 100
- arr의 모든 원소의 길이는 같습니다.
- 1 ≤ arr의 원소의 원소 ≤ 1,000
입출력 예arrresult
[[572, 22, 37], [287, 726, 384], [85, 137, 292], [487, 13, 876]] | [[572, 22, 37, 0], [287, 726, 384, 0], [85, 137, 292, 0], [487, 13, 876, 0]] |
[[57, 192, 534, 2], [9, 345, 192, 999]] | [[57, 192, 534, 2], [9, 345, 192, 999], [0, 0, 0, 0], [0, 0, 0, 0]] |
[[1, 2], [3, 4]] | [[1, 2], [3, 4]] |
[최종 풀이]
function solution(arr) {
let col = arr.length;
let row = arr[0].length;
let diff = Math.abs(col - row)
if (col > row){
arr = arr.map(inner => [...inner, ..."0".repeat(diff).split("").map(v => +v)]);
}else if(col < row){
let addArr = Array(row).fill(0)
while(col < row){
arr.push(addArr);
col ++;
}
}
return arr;
}
⚠️주의할 점
push는 배열의 길이를 반환한다.
처음 if 문에
arr = arr.map(inner => inner.push(4));
이렇게 작성했더니 arr 출력했을때 arr = [4,4,4,4] 가 나오는 이상한 일이 일어났다
왜냐면 arr의 각각의 요소가 inner.push(4)가 반환하는 배열의 길이 4 로 각각 치환되었기 때문이다.
그래서 spread 문으로 요소를 추가해주는 방법으로 수정했다.
https://school.programmers.co.kr/learn/courses/30/lessons/181831
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
특별한 이차원 배열 2
문제 설명
n × n 크기의 이차원 배열 arr이 매개변수로 주어질 때, arr이 다음을 만족하면 1을 아니라면 0을 return 하는 solution 함수를 작성해 주세요.
- 0 ≤ i, j < n인 정수 i, j에 대하여 arr[i][j] = arr[j][i]
제한사항
- 1 ≤ arr의 길이 = arr의 원소의 길이 ≤ 100
- 1 ≤ arr의 원소의 원소 ≤ 1,000
- 모든 arr의 원소의 길이는 같습니다.
입출력 예arrresult
[[5, 192, 33], [192, 72, 95], [33, 95, 999]] | 1 |
[[19, 498, 258, 587], [63, 93, 7, 754], [258, 7, 1000, 723], [587, 754, 723, 81]] | 0 |
[반복문을 사용한 풀이]
function solution(arr) {
var answer = 0;
for (let i = 0; i < arr.length; i++){
for (let j = 0; j < arr.length; j++){
arr[i][j] === arr[j][i] ? answer ++ : answer;
}
}
return answer === arr.length ** 2 ? 1 : 0;
}
[every 메서드를 사용한 풀이]
function solution(arr) {
return arr.every((v,i) => v.every((_,j)=> arr[i][j] === arr[j][i])) ? 1 : 0;
}
결국 두번 순회하는건 마찬가지인거같은데
메서드를 사용하는 편이 좀 더 좋아보인다? 왜 좋아보일까?
- every()는 조건을 만족하지 않는 요소를 만나면 즉시 false를 반환하고 종료
- 조기 종료 가능 → 성능 최적화
반면에 반복문을 사용하면
- 모든 요소를 끝까지 확인한 후 결과를 반환
따라서 가독성과 성능 측면에서 every 메서드를 사용하는 코드가 좋은 코드라고 할 수 있다. 고 한다. ㅎ
'개발 공부 일지 > JavaScript' 카테고리의 다른 글
[프로그래머스] 그림 확대 (0) | 2025.03.10 |
---|---|
[프로그래머스] 특별한 이차원 배열 1 (0) | 2025.03.10 |
[프로그래머스] 기초 - 전국 대회 선발 고사 (0) | 2025.03.07 |
[프로그래머스] 기초 - 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2025.03.05 |
[코어 자바스크립] 실행 컨텍스트 / 호이스팅 (1) | 2025.02.19 |