백준 2357번 - 최솟값과 최댓값(Node.js)
https://www.acmicpc.net/problem/2357
2357번: 최솟값과 최댓값
N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100
www.acmicpc.net
첫 번째 나의 풀이
제출시 런타임에러(TypeError) 발생
TypeError가 발생하여 Type을 계속해서 바꿔주었지만, 끝내 이 방법으로는 해결하지 못했다.
+ 입력을 이런 방법으로 받는건지도 아직 잘 모르겠다. (거의 2일 동안 fs 모듈 사용해서 입력 받는 방법을 공부했음에도 ..)
두 번째 나의 풀이
제출시 메모리 초과 발생
문득 어느 블로그에서 "아직까지도 몇몇 문제는 readline으로 풀면 메모리 초과 오류가 발생해서 fs 모듈을 사용해서 풀어야 한다"는 글을 보았던 것 같다.
하지만, fs 모듈을 사용하면 TypeError가 발생하고, readline을 사용해서 풀면 메모리 초과 오류가 떠서 아직 해결을 하지 못하였다.
+ 첫 번째 방법과 두 번째 방법 모두 VSCode에서는 잘 돌아가고 결과도 잘 나온다.
++ 하지만, 두 방법 모두 백준에서 오류가 발생해서 현재까지도 "실패"의 결과로 놔둔 상태이다.
+++ 가장 최근 node.js로 푼 사람들을 보면 1년전, 2년전이고, 구글링해도 node.js로 이 문제를 설명한 사람은 아직까지 없는 것 같다.
세그먼트 트리(추가)
(22.07.24 수정 및 추가) 두 번째 풀이 작성 후, 이 문제에 대해 열심히 고민한 끝에 세그먼트 트리를 이용해서 풀어보았고, 끝끝내 제출 결과 ... 맞았습니다!!
세 번째 풀이 전 세그먼트 트리(Segment Tree)에 대해서 알아야 코드를 이해할 수 있고, 풀 수 있다.
아래 링크는 간단하게 세그먼트 트리에 대해 설명해 놓았다.
2022.07.24 - [Algorithm] - 세그먼트 트리(Segment Tree)
세그먼트 트리(Segment Tree)
세그먼트 트리 여러 개의 데이터가 존재할 때 특정 구간의 합(최솟값, 곱 등)을 구하는데 사용하는 자료구조이다. 트리 종류 중 하나로 이진 트리의 형태이며, 특정 구간의 합을 가장 빠르게 구
hoonni3002.tistory.com
세 번째 나의 풀이
- 18 ~ 46번째 줄 : 세그먼트 트리(Segment Tree)를 초기화한다.
- 48 ~ 61번째 줄 : findMin()는 최솟값을 찾는 함수이다.
- 63 ~ 76번째 줄 : findMax()는 최댓값을 찾는 함수이다.
- 78 ~ 107번째 줄 : 위에서 만든 함수들을 이용하여 올바른 답을 리턴해주는 함수이다.
'Algorithm > Baekjoon' 카테고리의 다른 글
백준 11047번 - 동전 0(Node.js) (0) | 2022.07.28 |
---|---|
백준 10773번 - 제로(Node.js) (0) | 2022.07.27 |
물건을 쪼갤 수 없는 배낭 문제(0/1 Knapsack Problem) (0) | 2022.07.27 |
백준 12865번 - 평범한 배낭(Node.js) (0) | 2022.07.26 |
백준 1676번 - 팩토리얼 0의 개수(Node.js) (0) | 2022.07.10 |