[SWEA][D3][#01206] View
작성:    
업데이트:
카테고리: SWEA D3
태그: ProblemSolving, SWEA D3, SWEA PS
문제
보안 규정상 생략
My Sol
for tc in range(1, 11):
N = int(input())
arr = list(map(int, input().split()))
result = 0
for i in range(2, N-2):
# a, b, c, d 에 중앙값과 주위 값들의 차이를 각각 저장
a, b, c, d = (arr[i] - arr[i-2]), (arr[i] - arr[i-1]), (arr[i] - arr[i+1]), (arr[i] - arr[i+2])
# 만약 차이가 모두 양수, 즉 중앙값이 가장 크면
if a>0 and b>0 and c>0 and d>0:
# 가장 적게 차이나는 수 구하기
min_val = a
for k in [b, c, d]:
if min_val > k:
min_val = k
# 결과에 이를 더함
result += min_val
print(f'#{tc} {result}')
테스트 케이스는 10개로 고정되어있기 때문에 range(1, 11)로 고정시켰다.
idx를 2부터 배열 크기 -2까지 반복해서 조회하는데, 중앙값을 기준으로 -2, -1, 1, 2의 값과 중앙값의 차를 구한다. 만약 이 차이가 모두 양수라면 중앙값이 가장 크다는 뜻이므로, 모두 자연수인 뺄셈값 중에 가장 작은, 즉 5개 값 중에 차댓값을 찾아 이 차이를 결과에 더해준다. 이렇게 중앙값이 가장 큰 경우에만 차이를 결과에 더해주며 출력하면 되겠다.
결과
Pass
모범답안
for a in range(10):
L = int(input())
arr = list(map(int, input().split()))
cnt = 0
for i in range(2,L-2):
arr_rl = [arr[i-2],arr[i-1],arr[i+1],arr[i+2]]
maxV = arr[i-2]
for j in arr_rl:
if j > maxV:
maxV = j
if arr[i] > maxV:
cnt += arr[i]-maxV
print(f'#{a+1} {cnt}')
동기의 코드이다. 나는 처음부터 차이를 구해서 양수인지를 판단했는데, 그냥 주변 값을 리스트에 넣어 이 안에서 최댓값을 구하고, 이것보다 중앙값이 큰 경우에만 그 차이를 결과에 더해준다. 이렇게 되면 중앙값이 최대인지 판단하기 이전에 정렬을 매번 사용해야하므로 연산 시간이 길 것이라고 생각했으나, 연산 시간은 내 코드보다 빨랐다. 내가 차이를 4번 구하고 이를 if문에서 각각 양수인지 판단하는 과정보다 이 코드가 효율적인 모양이다.
댓글남기기