[백준 알고리즘] Node.js 1059. 좋은 구간
2023. 11. 24. 12:48ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/1059
1059번: 좋은 구간
[9, 10], [9, 11], [9, 12], [10, 11], [10, 12]
www.acmicpc.net
2. 풀이
- 좋은 구간의 개수를 구하는 문제다.
- 입력 부분의 수들이 정렬되지 않은 상태로 들어오기 때문에 먼저 정렬을 진행해준다.
- 주어진 n이 포함된 구간을 구해야 하기에, n보다 작은 수를 구하고, n보다 큰 수를 구해 n이 포함될 수 있는 구간을 찾는다.
- 공식을 만들어서 적용시켜준다
- (10보다 작은 수의 개수) * (10 이상인 수의 개수) + (10보다 큰 수의 개수)
const [L, S, n] = require('fs').readFileSync('/dev/stdin')
.toString().trim().split('\n');
const nums = S.split(" ").map(v => +v).sort((a,b) => a-b);
const findAns = () => {
// 만약 n이 집합에 포함되는 수라면 0을 출력.
if(nums.find(num => num === +n)) return 0;
let minVal = 0; // n보다 작은 수를 담아둘 변수.
let maxVal = 0; // n보다 큰 수를 담아둘 변수.
// n이 포함된 구간을 찾아야하기 때문에 n보다 작은 수를 구하고, n보다 첫번째 큰 수를 구해야함.
nums.forEach(num => {
if(num < n) minVal = num;
else if(num > n && maxVal === 0) maxVal = num;
})
// 집합에 있는 값은 포함하지 않으므로 작은 값은 1을 더하고, 큰 값은 1을 빼줌.
maxVal -= 1
minVal += 1
return ((n-minVal) * (maxVal-n+1) + (maxVal-n)) // 공식 적용해서 돌려주기.
}
console.log(findAns())
3. 정리
- 이번 문제는 어떻게 풀어야할 지 몰라서 python으로 문제를 해결하신 분의 블로그를 보고 해결했다.
- https://stopthebackspace.tistory.com/4
[백준][파이썬] 1059번 : 좋은 구간(코드, 해설, 풀이)
https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net - 문제 좋은 구간의 개수를 구하는 문제이다. - 해설 좋은 구간이란 4 8 13 24 30이 주어지고 n이 10일 때 8
stopthebackspace.tistory.com
아니 저걸보고 어떻게 공식을 생각하는거지....
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 1021. 회전하는 큐 (1) | 2023.11.29 |
---|---|
[백준 알고리즘] Node.js 1246. 온라인 판매 (0) | 2023.11.27 |
[백준 알고리즘] Node.js 1235. 학생 번호 (0) | 2023.11.22 |
[백준 알고리즘] Node.js 1205. 등수 구하기 (0) | 2023.11.22 |
[백준 알고리즘] Node.js 1996. 지뢰 찾기 (1) | 2023.11.21 |