개발/코딩테스트

[백준 | JavaScript] 2566 최댓값

prpn97 2023. 5. 24. 20:47

문제 설명

입출력

input output
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

문제 풀이

const fs = require("fs");
let input = fs.readFileSync("./input.txt").toString().trim().split('\n');
let result = []
let arr = []
let X = 0
let Y = 0
for(let i = 0; i < input.length; i++){
  let row = input[i].split(' ').map(Number)
  let max = row.reduce((a,b)=>Math.max(a,b))
  arr.push(row)
  result.push(max)
}
let max = result.reduce((a,b)=>Math.max(a,b))
for(let i = 0; i < arr.length; i++){
  arr[i].indexOf(max) > -1 ? X = i : 0 
}
console.log(max)

Y = arr[X].indexOf(max)
console.log(X+1,Y+1)

1. 최댓값 구하기.

먼저 최댓값이 81개의 숫자 중 어떤 것인지를 찾아보도록 한다. 

개행으로 split하게 되면 행으로 나뉘고, 그 안에서 각 행마다의 최댓값을 Math.max로 구한다. 

각 행은 arr라는 변수에 담았다. result에 행마다의 최댓값을 담았다.

result에서 가장 큰 수가 최댓값이 된다. 다시 Math.max로 추려준다. 

 

2. 행 구하기.

각 행 arr[i]에서 max의 인덱스값을 구한다. indexOf는 true일 경우 해당 인덱스값이 나오지만,

false여도 -1을 반환하기 때문에, -1을 초과하는 숫자를 X로 두었다.

90이라는 max의 값의 위치를 arr중에 찾는 것이다. X에는 arr[4]에서 찾은 4가 담긴다. 

 

3. 열 구하기.

Y는 X행에서 max가 몇번째에 있는지 찾아야 한다. 

간단하게 arr[4]인 arr[X]에서 다시 indexOf를 사용하여 max값을 찾는다.

 

그리고 행렬은 1,1부터 시작하지만, 인덱스는 0부터 시작하기 때문에

출력할 때 각 값에 1을 더해준다. 

 

코멘트

쉬운 문제인데도 아직 행렬에 많이 약하다. 

가로세로와 반대라 헷갈리는건진 모르겠지만 그 부분도 그렇고,

특정 배열의 위치에 대한 개념이 부족한 것 같다. 

많은 문제들을 풀어보며 어떻게 접근할지에 대해 더 명확해지면 좋겠다.

728x90