-
[Node.js/백준/구현] 2562번 최대값 / Math.max & findIndexTo infinity/Coding Practice 2022. 3. 14. 21:16
2022.03.14
Question
How to solve?
최대값을 구한 뒤, 몇번째 위치하는지 찾는 문제다.
최대값은 input을 배열형태로 바꾸어 찾는다.
몇번째 위치하는가는 최대값이 위치하는 인덱스 값을 구하면 된다.
1. 최대값 구하기
(1) Math.max(value)
- 값, 그리고 배열에서 최대값을 찾는 함수이다.
var arr = [1, 2, 3]; var max = Math.max(...arr);
(2) Math.max.apply(null,numArray)
- 배열에서 최대값을 찾는 함수이다.
let arr = [1, 2, 3] let max = Math.max.apply(null, arr);
참고로 (...)은 배열을 짧게 나타낸 새로운 스프레드 연산자이다.
하지만 배열이 너무 많은 요소를 갖고있는 경우에는 (...)이나 apply를 사용하는 방식은 오류가 발생할 수 있다.
왜냐하면 배열요소를 함수의 파라미터로 보고 계산하기 때문이다.
그래서 배열의 요소가 많다면, reduce를 사용하는 것이 안전하고 좋다.
(3) reduce
- 각 배열의 숫자를 하나씩 비교해나가면서 최대값을 찾는 방법이다.
var arr = [1,2,3]; var max = arr.reduce(function(a, b) { return Math.max(a, b); }, -Infinity);
참고로 세가지 방법을 모두 시도해봤는데 모두 정답으로 나온다.
2. 위치값 찾기
위치값은 '인덱스'값을 활용하면 좋다.
(1) findIndex() 메서드
- 배열에서 주어진 함수를 만족하는 첫번째 요소의 인덱스를 반환한다.
// Arrow function findIndex((element) => { /* ... */ } ) findIndex((element, index) => { /* ... */ } ) findIndex((element, index, array) => { /* ... */ } ) // Callback function findIndex(callbackFn) findIndex(callbackFn, thisArg) // Inline callback function findIndex(function(element) { /* ... */ }) findIndex(function(element, index) { /* ... */ }) findIndex(function(element, index, array){ /* ... */ }) findIndex(function(element, index, array) { /* ... */ }, thisArg)
이번 문제에서는 '배열'이 나왔기 때문에 아래와 같이 코드를 입력했다.
let order = input.findIndex(el => el == max) +1;
input이라는 배열에서 요소를 하나씩 꺼내, 위 1번에서 구한 max의 값과 비교해서 일치하면 해당 인덱스를 반환한다.
하지만, 인덱스틑 0부터 시작하고 위치값은 1부터 시작하기 때문에 뒤에 1을 더해줘야 위치값이 된다.
해당 부분만 유의하면 될 것 같다.
Reference
- mdn Array.prototype.findIndex()
'To infinity > Coding Practice' 카테고리의 다른 글
[Node.js/백준/스택] 10828번 스택 / pop, push, 삼항연산, switch문 (0) 2022.03.16 [Node.js/백준/구현] 2438번 별찍기 -1 / for 반복문 (0) 2022.03.14 [Programmers/Javascript] 위장 (Hash) (0) 2021.07.05 [Programmers/Javascript] 완주하지 못한 선수 (0) 2021.07.05 [백준 Node.js/Javascript] 2839번 설탕 배달 (0) 2021.07.03