📌 문제 링크
https://www.acmicpc.net/problem/2738
📌 문제 탐색하기
- N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
시간복잡도
- O(n^2)
📌 코드 설계하기
- 문제의 입력값을 개행을 기준으로 분리하여 첫 줄은 `info`, 나머지는 `input`으로 구조분해할당한다.
- `info`도 띄어쓰기로 분리하고 숫자로 변환하여 `n`과 `m`으로 구조분해할당한다.
- `input` 또한 띄어쓰기로 분리하고 숫자로 변환하여 2차원 배열 `arr`로 저장한다.
- 이중 for문을 만들어 `i`는 `n`만큼 , `j`는 `m`만큼 순회하며 `arr[i][j] + arr[i + n][j]`의 결과를 `result` 배열에 저장한다.
- `j` 반복문이 끝나면 `result` 배열을 띄어쓰기로 구분하여 출력한 후 초기화하여 다음 행을 준비합니다.
📌 시도 회차 수정 사항 (Optional)
1회차
- `arr[i][j] + arr[i + n][j]` 여기에서 `arr[i + n][j + m]`으로 잘못 작성해 인덱스 범위를 초과하여 오류가 발생되었다🙄
2회차
- 한 줄을 다 더한 후 다음 줄로 넘어가는 출력 형태를 어떻게 해야 하는지몰라 구글링을 하였다. for문 안에 `result` 배열을 선언하고, `j` 반복문이 끝나면 `result` 배열을 출력한 후, 다음 줄로 넘어가기 위해 배열을 초기화하는 방식이었다..
📌 정답 코드
//https://www.acmicpc.net/problem/2738
export {};
const fs = require("fs");
const filePath =
process.platform === "linux" ? "/dev/stdin" : __dirname + "/input1.txt";
const [info, ...input] = fs
.readFileSync(filePath)
.toString()
.trim()
.split("\n");
const [n, m] = info.split(" ").map(Number);
const arr = input.map((x: string) => x.split(" ").map(Number));
for (let i = 0; i < n; i++) {
const result = [];
for (let j = 0; j < m; j++) {
result.push(arr[i][j] + arr[i + n][j]);
}
console.log(result.join(" "));
}
'코딩 > 알고리즘' 카테고리의 다른 글
백준) 1152 - 단어의 개수 JS (0) | 2024.11.11 |
---|---|
백준) 10988 - 팰린드롬인지 확인하기 JS (0) | 2024.11.10 |
백준) 10818 - 최소, 최대 JS (0) | 2024.11.08 |
백준) 8393 - 합 JS (0) | 2024.11.07 |
백준) 25304 - 영수증 JS (1) | 2024.11.06 |