Koala - 12기/코딩테스트 준비 스터디

[백준/Python] 1940번 : 주몽

kwonlabong 2023. 9. 24. 12:46

문제

https://www.acmicpc.net/problem/1940

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net


풀이

갑옷을 만들기 위해 두 개의 재료가 필요하므로 투 포인터를 이용하여 구현할 수 있다.
먼저 입력받은 고유한 번호들을 정렬하고,
양 끝(l, r)에서 시작하여 두 수의 합이 m이 되는지 확인하면 된다.
합이 m이라면, 왼쪽(l)을 오른쪽으로 한 칸 옮기고 오른쪽(r)은 왼쪽으로 한 칸 옮긴다.
합이 m보다 작다면, 왼쪽을 오른쪽으로 한 칸 옮긴다. (l += 1)
합이 m보다 크다면, 오른쪽을 왼쪽으로 한 칸 옮긴다. (r -= 1)


코드

import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
li = sorted([*map(int, input().split())])

l, r, cnt = 0, n-1, 0
while l < r:
    t = li[l] + li[r]
    if t == m:
        l += 1
        r -= 1
        cnt += 1
    elif t < m:
        l += 1
    else:
        r -= 1

print(cnt)