[BOJ/Python] 9024 : 두 수의 합

정나영·2023년 8월 21일
0

👉 문제 링크

👉 전체 코드

import sys
input = sys.stdin.readline

t = int(input())
for _ in range(t):
    n,k = map(int,input().split())
    arr = list(map(int,input().split()))
    arr.sort()

    start,end = 0,n-1
    ans = sys.maxsize
    cnt = 0

    while start < end:
        total = arr[start] + arr[end]
        d = abs(k-total)

        if d < ans:
            ans = d
            cnt = 0 # ans이 기준이 되는 것이므로 초기화

        if total < k:
            if d == ans:    
                cnt += 1
            start += 1
        elif total > k:
            if d == ans:
                cnt += 1
            end -= 1
        else: # d == k
            cnt += 1
            start += 1
    
    print(cnt)

👉 풀이

배열을 오름차순으로 정렬한다.
start, end를 0과 n-1로 설정한다.
k와의 차이를 비교하여 가장 작은 값을 ans에 저장한다.

        if total < k:
            if d == ans:    
                cnt += 1
            start += 1
        elif total > k:
            if d == ans:
                cnt += 1
            end -= 1
        else: # d == k
            cnt += 1
            start += 1

위 부분에서 주의해야 하는 것은 total이 k보다 작거나 크지만 d가 현재 ans 값일 때이다.
이 경우, 조합의 경우의 수를 카운트 하는 cnt 값을 올려주어야 한다.

0개의 댓글