알고리즘

[백준] 1059. 좋은구간

j9972 2023. 4. 7. 15:37
728x90

1. 문제

https://www.acmicpc.net/problem/1059

 

2. 접근

1. 문제 이해가 어려운데, 좋은 구간은 ' n을 포함 & 구간안의 값들이 S에 포함 안되는 모든 경우의 수 ' 이렇게 이해해도 될거같다

2. 구간을 구하는 방법은 n이 포한되는 S의 (리스트 값+1), (다음 리스트 값)을 구하면 된다

3. 모든 경우의 수는 조합을 통해 구했다.

4. 모든 경우의 수에서 " 구간의 시작 값 > n의 값 " & " 구간의 끝 값 < n의 값 " 이면 경우의 수를 빼주면 된다

 

 

3. 풀이

import sys
input = sys.stdin.readline
from itertools import combinations as cb

length = int(input())
s = list(map(int,input().split()))
n = int(input())
res = []

s.sort()

if n in s:
    print(0)
else:

    start = 0
    end = 0
    for i in s:
        if i < n:
            start = i + 1
        elif i > n:
            end = i
            break
    
    for i in range(start,end):
        if i > 0:
            res.append(i)
    
    tot = len(list(cb(res,2)))

    for data in list(cb(res,2)):
        if data[0] > n or data[1] < n:
            tot -= 1
    print(tot)