백준 / 좋은 구간 / 1059

Question

문제링크
Silver 5

Logic

기본 구조 : if-else
1. N이 어떤 숫자 사이인지 체크해야 한다. left, right 변수를 이용해 탐색한다.
2-1. 집합 요소가 1개이거나 N이 첫번째 요소보다 작을 경우

  • N이 첫번째 요소라면 경우의 수는 없다.
  • N이 1이고, 첫번째 요소가 1또는 3라면 경우의 수는 없다.
  • N이 1이고, 2-2의 경우가 아니라면 경우의 수는 첫번째 요소-2이다.

2-2.그 외에

  • 집합 내 요소를 하나씩 left에 넣으면서, N보다 커지는 순간, 그 수를 right에 넣고 반복문을 탈출한다.
  • right에 어떠한 수도 입력되지 않았다면 N은 집합 내 모든 수보다 큰 것이다.
  • left나 right가 1000이라면 경우의 수는 없다.
  • 그 외의 모든 경우에 대해,left, N, right에 대해 경우의 수는 (left와 N 사이의 숫자 + right와 N 사이의 숫자 + 앞 두 수의 곱)이다.

Code

from sys import stdin

L = int(stdin.readline().strip())
data = sorted(list(map(int,stdin.readline().strip().split())))
N = int(stdin.readline().strip())

left,right = 0,0

if L==1 or N < data[0] :
    if N==data[0] : print(0)
    elif N==1 :
        if data[0]==1 or data[0]==2 : print(0)
        else : print(data[0]-2)
    else :
        lnums = N-1
        rnums = data[0]-N-1
        print(lnums + rnums + lnums*rnums)
else :
    for num in data:
        if left != 0 :
            if num > N :
                right = num 
                break
            else : left = num
        else : left = num
    if right==0 : right==1000

    if left == N or right == N : print(0)
    else :
        lnums = N-left-1
        rnums = right-N-1
        print(lnums + rnums + lnums*rnums)

좋은 웹페이지 즐겨찾기