문제:
Lucky Set이란 정수의 집합이다.
구간 [A,B]란 A보다 크거나 같고, B보다 작거나 같은 모든 정수가 있는 구간이다. 이때, A와 B는 모두 양수이고, B는 A보다 크다.
구간 [A,B]가 Unlucky가 되기 위해선 구간에 속한 모든 정수가 Lucky Set에 없어야 한다.
Lucky Set과 N이 주어질 때, N을 포함하는 Unlucky 구간의 개수를 구하는 프로그램을 작성하시오.
입력:
첫째 줄에 Lucky Set에 포함된 숫자의 개수 L이 주어진다. 둘째 줄에는 L개의 수가 주어진다. 이 수는 1,000보다 작거나 같은 자연수이고, L은 50보다 작거나 같은 자연수이다. 그리고 중복되지 않는다. 마지막 줄에는 N이 주어진다. N은 lucky Set에서 가장 큰 수보다 작거나 같은 자연수이다.
출력:
첫재 줄에 문제의 정답을 출력한다.
풀이방법:
N이 Lucky set의 어느 구간에 속해 있는지 파악해야 한다. 이 때, N이 lucky set의 원소일 수 있으므로 주의해서 탐색해야 한다. 반복문을 사용해서 N이 속해 있는 구간을 파악하고 왼쪽 값을 left, 오른쪽 값을 right라고 설정한다. N이 lucky set의 원소보다 다 작은 경우는 예외케이스로 판단하도록 한다.
left 와 right를 구한 뒤에는 이중반복문을 사용해서 구간을 생성하여, 이 구간 내에 N이 있는 경우에만 answer에 값을 더하도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
L = int(input())
lucky = list(map(int,input().split()))
lucky.sort()
answer = 0
N = int(input())
left,right = 0, 0
if N<lucky[0]:
left=0
right=lucky[0]
elif N == lucky[0]:
pass
else:
for i in range(1,len(lucky)):
if N == lucky[i]:
break
elif lucky[i-1] < N and lucky[i] > N:
left = lucky[i-1]
right = lucky[i]
break
if left+right==0:
print(answer)
else:
for l in range(left+1,right):
for r in range(l+1,right):
if l<=N<=r:
answer+=1
print(answer)
|
cs |
문제링크:
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1992. 쿼드트리 (0) | 2020.11.17 |
---|---|
[BOJ]1041. 주사위 (0) | 2020.11.12 |
[BOJ]10775. 공항 (0) | 2020.10.29 |
[BOJ]1786. 찾기 (0) | 2020.10.27 |
[BOJ]19948. 음유시인 영재 (0) | 2020.10.15 |