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)