[백준 알고리즘] 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. 정리

 

[백준][파이썬] 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

  • 아니 저걸보고 어떻게 공식을 생각하는거지....