- k값을 정하고, 그 값에 따라 list를 돌면서 l과 r값을 정의한다. S를 미리 sorted했으나 처음부터 k보다 큰 값이 나오면 오류가 생겼다 -> 코드를 짤 때 특수한 경우에만 국한되지 않도록 인덱스를 이용해서 무언갈 하는 것은 좋지 못한 것 같다.
- cnt를 두고 이미 max값이 한 번 지정되었을 경우 더이상 변화가 없도록 설정했다. 그러나 idx가 0일 경우 -1로 가장 마지막 값이 l에 할당되면서 오류가 생겼다
- min,max로 둔 후 가장 가까운 값을 따로 지정했다.
- combination을 이용해서 그 경우를 계산하려 했으나 단순 식으로 구현가능했기에 사용하지 않았다.
from itertools import combinations
N = int(input())
S = sorted(map(int,input().split()))
k = int(input())
l = 0
r = 0
cnt = 0
ans = 0
if N == 1:
l = 1
r = S[0]-1
else:
for idx,i in enumerate(S):
if k == i:
ans = -1
break
if k<i and cnt == 0:
if idx == 0:
r = S[idx]-1
l = 1
else:
r = S[idx]-1
l = S[idx-1]+1
cnt += 1 # 한 번만 실행되도록
if ans == -1:
print(0)
else:
print(l)
print((k-l)*(r-k+1) + (r-k))
위 코드에선 N이 1일경우, S[0]가 k보다 클 경우를 모두 고려하지 못했고 이런 특수한 케이스에 대해 하나하나 조건문을 제시하고 있어 효율적인 코드라고 볼 수 없다.
N = int(input())
S = sorted(map(int,input().split()))
k = int(input())
min = 0
max = 0
ans = 0
if k in S:
ans = -1
else:
for i in S:
if i < k: # i 가 k보다 작다면
min = i
elif i > k and max == 0:
max = i
min = min+1
max = max-1
if ans == -1:
print(0)
else:
print((k-min)*(max-k+1) + (max-k))
min값과 max값을 경우에 따라 나누어서 따로따로 구하고있다. 나의 경우에는 k보다 i가 커지는 시점에 두 개의 값을 모두 결정했다면 min과 max를 따로 정의해서 충돌이 나지 않고 있다.