백준 2738 행렬 덧셈

2023. 3. 12. 13:55코딩 공부 연습

반응형

백준 2738 행렬 덧셈


타입스크립트를 통해 2차원 배열을 만들고 이용하기 위한 연습 문제로 풀어 보았는데, 좀처럼 안되어 그냥 1차원 배열로 만들어 문제를 해결하였다. 이번에 새로 알게 된 내용을 정리하면 다음과 같다.

  1. console.log 로 한줄을 찍으면 무조건 개행이 하나 들어가기 때문에 그렇지 않은 출력 형식을 알아내야 했다.

    process.stdout.write(sum.toString() + ' ');

    다음의 출력 형식을 사용하면 개행이 들어가지 않게 출력할 수 있는데, 대신 toStirng으로 스트링 타입으로 변환해 주어야 한다.


  2. 입력에 개행, 띄어쓰기 기준으로 마구 잘려 나가 있는 입력을 해결하기 위한 방안이 필요하다.


    우선 개행을 기준으로 input.txt 를 분리해 받는다. 이후 이 Input 들을 필요에 따라 ' ' 기준으로 split 하면 된다.
    배열을 순회하고 삽입하고 빼는 명령어들이 몇가지가 있는데, 우선 shift 연산을 살펴보자. - shift 연산은 배열 인덱스 하나를 이동시킨다. - push 연산을 통해 객체를 삽입할 수 있다.
const fs = require('fs');

const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

let firstline = input[0].split(' ');

input.shift();

let a = +firstline[0];
let b = +firstline[1];

let arr1: number[] = [];
let arr2: number[] = [];

for (let i = 0; i < a; i++)
{
    let oneline = input[i].split(' ');
    for (let j = 0; j < b; j++)
    {
        arr1.push(oneline[j]);
    }
}
for (let i = a; i < a*2; i++)
{
    let oneline = input[i].split(' ');
    for (let j = 0; j < b; j++)
    {
        arr2.push(oneline[j]);
    }
}

let arr3: number[] = [];

for (let i = 0; i < a; i++)
{
    for (let j = 0; j < b; j++)
    {
        const sum = +arr1[i*b + j] + +arr2[i*b + j];
        process.stdout.write(sum.toString() + ' ');
    }
    if ( i != a-1)
    {
        console.log('');
    }
}

아직까지 코드가 많이 c 스러운 점이 맘에안든다. 좀 고쳐나갈 수 있으면 좋겠다.

'코딩 공부 연습' 카테고리의 다른 글

백준 1330 두 수 비교하기  (0) 2023.03.12
백준 2739 구구단  (0) 2023.03.12
백준 2475 검증수  (0) 2023.03.11
백준 9934 완전 이진 트리  (0) 2023.03.04
백준 15900 나무 탈출  (1) 2023.03.03