첫 줄에 정수 N, K가 주어지고 N은 날짜 수, K는 합을 구하기 위한 연속적인 날짜 수를 의미한다
둘째 줄에는 n개의 날짜 별 온도가 주어질 때, 연속되는 k일의 온도의 합이 최대가 되는 값을 구하는 문제
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
temperature = list(map(int, input().split()))
value = sum(temperature[:k])
answer = value
for i in range(k, n):
value += temperature[i] - temperature[i-k]
answer = max(answer, value)
print(answer)
< 풀이 과정 >
문제를 보고 바로 해결하였으나 시간초과를 해결하지 못해 20분 정도 소요한 문제😭
기본적으로 주어진 날짜 별 온도의 k일의 합을 구하는 문제이므로 value로 초반 값을 저장해준다.
answer를 value로 저장한 후, for문으로 k일부터 n일까지 탐색하며 value를 갱신해준다.
이후 answer를 value와 비교하여 더 큰 값만을 갱신하여 결과를 기록해준다.
두 배열 A, B가 주어지고 둘째 줄에는 A의 원소, 셋째 줄에는 B의 원소가 주어질 때 두 배열을 합친 후 정렬한 결과를 출력한다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
answer = a + b
answer.sort()
print(*answer)
< 풀이 과정 >
a, b 두 리스트를 입력받고 a+b로 answer를 표현한 후 오름차순 정렬해 원소만을 출력하면 되는 문제
산성 용액은 양수로, 알칼리성 용액은 음수로 나타낸다. 같은 양의 두 용액을 혼합한 용액은 각 용액의 특성값의 합으로 정의한다.
이때 두 용액을 합친 용액의 특성 값이 0에 가장 가까운 용액을 만들 때 두 용액을 오름차순으로 출력하는 문제
import sys
input = sys.stdin.readline
n = int(input())
li = sorted(list(map(int, input().split())))
left = 0
right = n - 1
value = 2e9 + 1
answer = []
while left < right:
left_val = li[left]
right_val = li[right]
total = left_val + right_val
if abs(total) < value:
value = abs(total)
answer = [left_val, right_val]
if total < 0:
left += 1
else:
right -= 1
print(*answer)
< 풀이 과정 >
two - pointer 그대로 구현한 풀이로 시작, 끝 인덱스를 각각 left, right로 두고 값이 갱신되는 것을 value로, 최종 결과 제출을 answer 변수로 진행한다.
while 문으로 left < right에 한해 left_val, right_val을 저장해 total로 표현하고, total의 절대값과 value를 비교해가며 value를 최소값으로 갱신해주는 문제