❓Problem
🥉👌
<그림 1>과 같이 9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때,
이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오.
예를 들어, 다음과 같이 81개의 수가 주어지면
이들 중 최댓값은 90이고, 이 값은 5행 7열에 위치한다.
🔑Input
첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다.
주어지는 수는 100보다 작은 자연수 또는 0이다.
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
🔒Output
첫째 줄에 최댓값을 출력하고,
둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다.
최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
90
5 7
❗Solution
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath)
.toString()
.trim()
.split('\n')
.map(item => item.split(" ").map(Number));
// [
[
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
]
]
let maxArr = [];
let column = 0;
for (let i = 0; i < 9; i++) {
column = Math.max(...input[i]);
// 85, 88, 87, 85, 90, 87, 89, 70, 87
maxArr.push([column, i + 1, input[i].indexOf(column) + 1]);
// [
[ 85, 1, 3 ],
[ 88, 2, 5 ],
[ 87, 3, 1 ],
[ 85, 4, 4 ],
[ 90, 5, 7 ],
[ 87, 6, 2 ],
[ 89, 7, 6 ],
[ 70, 8, 3 ],
[ 87, 9, 1 ]
]
}
maxArr.sort((a, b) =>b[0] - a[0])
// 내림차순으로 정렬
[ 90, 5, 7 ],
[ 89, 7, 6 ],
[ 87, 9, 1 ],
[ 88, 2, 5 ],
[ 87, 6, 2 ],
[ 85, 4, 4 ],
[ 87, 3, 1 ],
[ 85, 1, 3 ],
[ 70, 8, 3 ]
console.log(maxArr[0][0]);
console.log(maxArr[0][1] + " " + maxArr[0][2]);
💯Study
회고
뭔가 깔끔하게 못 푼 느낌.. 💦
다음엔 시간 복잡도에 대해 더 공부해야 겠다 ..똑딲똒딲..
Reference
'Coding Test > Baekjoon' 카테고리의 다른 글
[Baekjoon node.js] 10798번: 세로읽기 (1) | 2024.01.29 |
---|---|
[Baekjoon node.js] 2738번: 행렬 덧셈 (1) | 2024.01.25 |