저장을 습관화
프로그래머스 LV.0 이차원 배열 대각선 순회하기 본문
프로그래머스 LV.0 이차원 배열 대각선 순회하기
https://school.programmers.co.kr/learn/courses/30/lessons/181829
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
이차원 배열 대각선 순회하기
2. 문제 설명
2차원 정수 배열 board와 정수 k가 주어집니다.
i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.
3. 제한 사항
- 1 ≤ board의 길이 ≤ 100
- 1 ≤ board[i]의 길이 ≤ 100
- 1 ≤ board[i][j] ≤ 10,000
- 모든 board[i]의 길이는 같습니다.
- 0 ≤ k < board의 길이 + board[i]의 길이
4. 예시
board | k | result |
[[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5]] | 2 | 8 |
5. 기본 제공 코드
function solution(board, k) {
var answer = 0;
return answer;
}
6. 제출한 내 답
const solution = (board, k) => {
let answer = 0;
board.forEach((v, i) => {
v.forEach((v, j) => {
i + j <= k ? (answer += v) : "";
});
});
return answer;
};
6-2. VSC에 작성한 내용
const solution = (board, k) => {
// board[i][j]과 같을때 i+j <= k를 만족하는 요소들의 합
// 입출력 예시의 경우 아래와 같다.
// return (
// board[0][0] + // 0
// board[0][1] + // 1
// board[0][2] + // 2
// board[1][0] + // 1
// board[1][1] + // 2
// board[2][0] // 2
// ); // 실행 결과: 8
let answer = 0;
board.forEach((v, i) => {
v.forEach((v, j) => {
// console.log(`i: ${i}, j: ${j}, 내부 forEach 요소: ${v}`);
i + j <= k ? (answer += v) : "";
});
});
return answer;
};
// 테스트
console.log(
solution(
[
[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
],
2
)
);
7. 특이사항
런타임 에러가 발생한 코드
const solution = (board, k) => {
let answer = 0;
for (i = 0; i <= k; i++) {
for (j = 0; j + i <= k; j++) {
answer += board[i][j];
}
}
return answer;
};
반복문을 실행하는 조건이 j + i <= k로는 부족했나 보다.
8. 다른 사람이 작성한 답
8-1. 가장 많이 쓰인 풀이 방법
function solution(board, k) {
let answer = 0;
for (let x = 0; x < board.length; x++) {
for (let y = 0; y < board[0].length; y++) {
if (x + y <= k) answer += board[x][y];
}
}
return answer;
}
i+j<=k로 확인할 요소를 제한하는 방법이 런타임 에러가 나오는데
모든 요소를 전부 확인하는 방법이 통과했다고?
이 부분 더 알아봐야겠다
[추가]
원인을 찾았다
만약 입력값이 [[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]], 9와 같을 경우
가져올 수 있는 최대 요소는 board[3][2]가 되지만
const solution = (board, k) => {
let answer = 0;
for (i = 0; i <= k; i++) {
for (j = 0; j + i <= k; j++) {
answer += board[i][j];
}
}
return answer;
};
for 반복문은 board[3][3], board[3][4], board[3][5].... board[9][0] 까지의 요소를 요구한다.
즉 런타임 에러는 코드의 실행시간이 오래걸려서 발생한 것이 아닌
undefined 에러로 인해 발생한 것이었다.
너무 조건 i+j<=k에만 집착해서 생긴 에러였다.
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.1 서울에서 김서방 찾기 (0) | 2023.09.22 |
---|---|
프로그래머스 LV.0 수열과 구간 쿼리 1 (0) | 2023.09.22 |
프로그래머스 LV.0 중복된 문자 제거 (0) | 2023.09.22 |
프로그래머스 LV.0 날짜 비교하기 (0) | 2023.09.21 |
프로그래머스 LV.0 합성수 찾기 (0) | 2023.09.21 |