알고리즘
[백준, 파이썬, 1059번] 좋은 구간
hminor
2023. 12. 21. 11:06
반응형
풀이
- 처음에는 해당 문제에 대한 이해가 되질 않았다...
- 역시 알고리즘은 계속 풀면서 문제 이해하는 능력을 키워야하는 것 같다...
- 무튼 해당 문제에선 주어지는 집합 S에 해당하는 구간에 n을 포함하는 좋은 구간의 개수를 구하는 것으로
- S = [4,8,13,24,30], n = 10 의 경우엔
- 8과 13 사이에 10이 속하기에 해당 구간에서 8과 13이 포함되지 않은
- 9와 12 사이에서 찾는것인데
- 처음엔 여기서 막혔다.
- 이유는 그러면 [ [9,10], [9,11], [9,12], [10,11], [10,12], [11,12]] 이렇게 되는거 아닌가?
- 그러다 문제에서 n을 포함하는 좋은 구간의 개수를 구해보자. 라는 말을 확인하게 되어 이해할 수 있었다.
- 이후 나머지는 간단한 연산 문제이기에 쉽게 해결되었지만 간과한 것이
- 집합 S의 첫 번째의 것에 대한 조사도 해야하기에 S에 0을 추가하여 조사할 수 있도록 해결.
- 물론 정렬도 해줘야 함.
import sys
input = sys.stdin.readline
L = int(input())
S = list(map(int,input().split()))
n = int(input())
S.append(0)
S.sort()
for i in range(len(S)-1):
if S[i] == n or n == S[i+1]:
print(0)
break
elif S[i] <= n <= S[i+1]:
print((n-S[i])*(S[i+1]-n)-1)
break