티스토리 뷰

t = int(input())

while t>0:
    t-=1
    n,k = map(int,input().split())
    a = list(map(int,input().split()))
    a.sort()

    l=0
    r=n-1
    c=0
    d=0
    e=2e8
    while l<r:
        d = a[l]+a[r]
        if d==k:
            if e>0:
                c=0
                e=0
            c+=1
            l+=1
            r-=1
        else:
            if abs(k-d)<e:
                e=abs(k-d)
                c=1
            elif abs(k-d)==e:
                c+=1
                
            if d<k:
                l+=1
            elif d>k:
                r-=1
    print(c)

 

풀이 : 정렬, 두 포인터

 

1. 리스트로 입력받은것들을 담아논다음, 오름차순 정렬을 합니다

2. 두 포인터(l,r)을 준비하고, 개수 : c, k와 가장 가까운 수의 값의 차이를 담을 e을 준비합니다.

3. 두 포인터로 반복을 하면서, 가장 가까운 수들의 합이 나오면 e을 갱신하고 c=1로 합니다. 만약 e와 값이 갔다면 c만 증가 시켜줍니다. 만약  k와 같은 값이 나온다면 e=0으로 갱신하고 c=1로 합니다.  k와 두 수의 합의 차이를 구하기 위해 abs을 사용하였습니다.

'Python > BAEKJOON' 카테고리의 다른 글

python 10825번 국영수 (백준)  (0) 2025.02.24
python 1758번 알바생 강호 (백준)  (0) 2025.02.24
python 1253번 좋다 (백준)  (0) 2025.02.23
python 2212번 센서 (백준)  (0) 2025.02.18
python 1141번 접두사 (백준)  (0) 2025.02.17
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함