4/4 Coding Test

김태준·2023년 4월 4일
0

Coding Test - BOJ

목록 보기
24/64
post-thumbnail

✅ 문제 풀이 - BOJ (Two-pointer)

🎈 2599 수열

첫 줄에 정수 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와 비교하여 더 큰 값만을 갱신하여 결과를 기록해준다.

🎈 11728 배열 합치기

두 배열 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를 표현한 후 오름차순 정렬해 원소만을 출력하면 되는 문제

🎈 2470 두 용액

산성 용액은 양수로, 알칼리성 용액은 음수로 나타낸다. 같은 양의 두 용액을 혼합한 용액은 각 용액의 특성값의 합으로 정의한다.
이때 두 용액을 합친 용액의 특성 값이 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를 최소값으로 갱신해주는 문제

  • 만일 total 이 0보다 작다면 왼쪽 인덱스 + 1
  • 만일 total 이 0보다 크다면 오른쪽 인덱스 - 1
profile
To be a DataScientist

0개의 댓글