백준 / 좋은 구간 / 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)
Author And Source
이 문제에 관하여(백준 / 좋은 구간 / 1059), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@swany0509/백준-좋은-구간-1059저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)