JB의 이모저모
[BOJ 1059🥈4] 좋은 구간 (Python) 본문
https://www.acmicpc.net/problem/1059
문제
정수 집합 S가 주어졌을때, 다음 조건을 만족하는 구간 [A, B]를 좋은 구간이라고 한다.
- A와 B는 양의 정수이고, A < B를 만족한다.
- A ≤ x ≤ B를 만족하는 모든 정수 x가 집합 S에 속하지 않는다.
집합 S와 n이 주어졌을 때, n을 포함하는 좋은 구간의 개수를 구해보자.
입력
첫째 줄에 집합 S의 크기 L이 주어진다. 둘째 줄에는 집합에 포함된 정수가 주어진다. 셋째 줄에는 n이 주어진다.
출력
첫째 줄에 n을 포함하는 좋은 구간의 개수를 출력한다.
제한
- 1 ≤ L ≤ 50
- 집합 S에는 중복되는 정수가 없다.
- 집합 S에 포함된 모든 정수는 1보다 크거나 같고, 1,000보다 작거나 같다.
- 1 ≤ n ≤ (집합 S에서 가장 큰 정수)
예제 입력 1
4
1 7 14 10
2
예제 출력 1
4
[2,3], [2,4], [2,5], [2, 6]
예제 입력 2
5
4 8 13 24 30
10
예제 출력 2
5
[9, 10], [9, 11], [9, 12], [10, 11], [10, 12]
예제 입력 3
5
10 20 30 40 50
30
예제 출력 3
0
예제 입력 4
8
3 7 12 18 25 100 33 1000
59
예제 출력 4
1065
⭕ CODE
from itertools import combinations
l = int(input())
arr = list(map(int, input().split()))
arr.sort()
n = int(input())
if n in arr:
print(0)
else:
max = 0
min = 0
for i in range(0, l - 1):
if arr[i] < n and arr[i + 1] > n:
max = arr[i + 1] - 1
min = arr[i] + 1
if min == 0 and max == 0:
max = arr[0]-1
min = 1
li = [int(i) for i in range(min,max+1)]
new = list(combinations(li,2))
count = 0
for x,y in new:
if x <= n and n <= y:
count += 1
print(count)
✏️ Comment
실버 4라고 만만하게 봤다가 많이 틀린 문제이다. -> 사실 아무 생각없이 풀고 틀림(코테에서 진짜 안좋은 습관이다) 한방에 해결하려는 습관을 기르자
n의 범위가 arr[0]보다 작은 경우를 생각못했다. 그런 경우에는 min을 1로 max를 arr[0]-1로 설정해 주어야한다.
최소 최대를 구했지만 n이 그 사이에 들어가는 모든 경우를 구하는 공식을 모르겠어서 그냥 조합을 사용해서 그 안에 n이 존재하는 방식으로 문제를 해결했다.
- 문제를 한번에 통과하게끔 초기에 고민을 많이 하자
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 6068🥇5] 시간 관리하기 (Python) (0) | 2023.09.15 |
---|---|
[BOJ 10971🥈2] 외판원 순회 2 (Python) (0) | 2023.09.15 |
[BOJ 13707 🥇4] 합분해 2 (Python) (0) | 2023.09.08 |
[BOJ 16724🥇3] 피리 부는 사나이(Python) (2) | 2023.09.06 |
[BOJ 1918 🥇2] 후위 표기식(Python) (0) | 2023.09.05 |