본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 1940 주몽

by Alan_Kim 2023. 2. 18.
728x90
반응형

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

 

1940번: 주몽

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

www.acmicpc.net

 

문제 해결

  • 두 수의 합이 특정한 수(m)이 되야함.
  • 리스트를 올림차순으로 정렬하고 투포인터를 이용해 두 수의 합을 구한다.
  • 두 수의 합이 m보다 크면 오른쪽 포인터를 왼쪽으로 옮긴다.
  • 두 수의 합이 m보다 작으면 왼쪽 포인터를 오른쪽으로 옮긴다.
  • 두 수의 합이 m과 같으면 정답 ans를 1을 올리고 왼쪽 포인터를 오른쪽으로 한 칸, 오른쪽 포인터를 왼쪽으로 한 칸 옮겨서 새로운 경우의 수를 찾는다.

CODE

import sys
input = sys.stdin.readline

n = int(input())
m = int(input())
S = list(map(int, input().split()))
S.sort()
ans = 0
start = 0
end = n-1

while start<end:
    if S[start] + S[end] > m:
        end -= 1
    elif S[start] + S[end] < m:
        start += 1
    else:
        ans +=1
        start +=1
        end -=1
print(ans)
728x90
반응형

댓글