본문 바로가기

백준/JavaScript

[JS] 백준 2차원 배열 - 첫 번째 이야기

728x90

 

 

2차원 배열 단계의 첫 번째 시간이다.

좋아~~ 힘차게 고!

 

 

문제

https://www.acmicpc.net/step/2

 

2차원 배열 단계

2차원 배열을 활용하여 색종이로 평면을 덮는 문제

www.acmicpc.net

 

 

 

문제 2738번

https://www.acmicpc.net/problem/2738

 

2738번: 행렬 덧셈

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같

www.acmicpc.net

 

음... 배열을 만들어서 입력된 행렬들의 값을 더해서 배열에 위치에 맞게 넣어주면 될 것 같은데...

어떻게 작성해야 할지 좀 헷갈렸다.

찾아보니 잘 정리되어 있는 풀이가 있었다.

그래서 사용 방법을 익혀서 작성해 봤다.

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n').map(x=>x.split(' ').map(Number));

const [n, m] = input.shift();   //shift()를 통해 해당 요소 제거

//nXm 배열 생성
let arr = new Array(n).fill().map(()=>new Array(m).fill(0));

//입력받은 행렬의 각 값을 합해서 생성한 배열에 넣기
for(let i=0;i<n;i++){
    for(let j=0;j<m;j++){
        arr[i][j] = input[i][j]+input[i+n][j];
    }
}

//출력 조건에 맞게 result배열에 넣기
let result = [];
for(let i=0;i<arr.length;i++){
    for(let j=0;j<arr[0].length;j++){
        result += arr[i][j] + ' ';
    }
    result += '\n';
}

console.log(result);

 

 

입력을 받을 때 미리 나눠주니 좋은 것 같다.

그리고 shift()를 통해 사용한 요소를 제거하니 다음 입력값을 사용할 때 편했다.

 

 

[참고] https://minjo0n.tistory.com/5

 

 

 

문제 2566번

https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net

 

이 문제는 최댓값과 해당 인덱스를 저장할 변수를 만들고 for문을 이용하여 풀면 될 것 같다.

여기서 주의할 점은 행 번호랑 열 번호가 1부터 시작한다는 점이다. 그러니 인덱스에서 각각의 값에 1을 더해줘야 한다.

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n').map(x=>x.split(' ').map(Number));

let max = 0;
let index = [];

for(let i=0;i<9;i++){
    for(let j=0;j<9;j++){
        if(input[i][j]>=max){
            max = input[i][j];
            index = [i+1,j+1];
        }
    }
}
console.log(max);
console.log(index.join(' '));

 

 

예제로 테스트했을 때는 잘 출력됐는데 '틀렸습니다'가 나와서 코드를 다시 한번 자세히 봤다.

그런데 input [i][j]와 max를 비교해 줄 때 '='를 빼먹어서 그런 것이었다. 내가 max를 0으로 초기화를 했기 때문에 최댓값이 0이라면 index에는 아무 값도 들어오지 않는다.

 

 

ㅎㅎ... 잘 생각해야지...

오늘은 여기까지~~

728x90