문제
https://www.acmicpc.net/problem/1940
풀이
갑옷을 만들기 위해 두 개의 재료가 필요하므로 투 포인터를 이용하여 구현할 수 있다.
먼저 입력받은 고유한 번호들을 정렬하고,
양 끝(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)
'Koala - 12기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/phthon3] 2467번: 용액 (0) | 2023.09.25 |
---|---|
[백준 Python] 1966번: 프린터 큐 (0) | 2023.09.24 |
[백준/Python] 1644번 : 소수의 연속합 (0) | 2023.09.21 |
[백준/C++] 11048번: 이동하기 (0) | 2023.09.21 |
[백준/pypy3] 21610번 : 마법사 상어와 비바라기 (0) | 2023.09.21 |