문제 설명
입출력
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
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] 명예의 전당(1) (0) | 2023.05.26 |
---|---|
[프로그래머스 | JavaScript] 폰켓몬 (0) | 2023.05.25 |
[백준 | JavaScript] 25206 너의 평점은 (0) | 2023.05.23 |
[백준 | JavaScript] 4344 평균은 넘겠지 (0) | 2023.05.22 |
[백준 | JavaScript] 1157 단어 공부 (0) | 2023.05.22 |