코딩테스트 공부/node.js

(백준)2566.최댓값

책다니엘 2024. 1. 27. 04:39

문제

<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.

예를 들어, 다음과 같이 81개의 수가 주어지면

3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80

이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.

입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.

출력

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

예제 입력 1 

3 23 85 34 17 74 25 52 65
10 7 39 42 88 52 14 72 63
87 42 18 78 53 45 18 84 53
34 28 64 85 12 16 75 36 55
21 77 45 35 28 75 90 76 1
25 87 65 15 28 11 37 28 74
65 27 75 41 7 89 78 64 39
47 47 70 45 23 65 3 41 44
87 13 82 38 31 12 29 29 80

예제 출력 1 

90
5 7

 

 

풀이

 

1. 각 행렬에서 최댓값을 찾아 max, row, field값을 저장하는 배열(arr)과

2. 전체 행렬에서의 max값을 저장하는 배열(maxArr)을 따로 만들고

3. 마지막에 for문으로 순회하면서 전체 행렬에서의 최댓값을 가진 arr의 값을 불러오는 식으로 풀었다.

 

let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let arr = [];
let maxArr = [];
let maxVal = { max: 0, row: 0, field: 0 };

// 각 row마다 max값을 가진 좌표들을 구하는 코드
for (let i = 0; i < input.length; i++) {
  let values = input[i].trim().split(" ");
  let maxValue = {
    max: Math.max(...values),
    row: i + 1,
    field: values.indexOf(`${Math.max(...values)}`) + 1,
  };
  maxArr.push(maxValue.max);
  arr.push(maxValue);
}

// 행렬 전체의 최댓값과 비교하여 해당 좌표값을 구하는 코드
for (let i = 0; i < arr.length; i++) {
  if (Math.max(...maxArr) === arr[i].max) {
    maxVal.max = arr[i].max;
    maxVal.row = arr[i].row;
    maxVal.field = arr[i].field;
  }
}

console.log(maxVal.max);
console.log(maxVal.row + " " + maxVal.field)

'코딩테스트 공부 > node.js' 카테고리의 다른 글

(백준) 2563.색종이  (1) 2024.01.28
(백준)10798. 세로읽기  (2) 2024.01.27
(백준)25206. 너의 평점은  (0) 2024.01.21
(백준)1316. 그룹 단어 체커  (1) 2024.01.21
(백준)2444. 별 찍기  (1) 2024.01.20