티스토리 뷰

728x90

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

 

1940번: 주몽

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

www.acmicpc.net


  • 해설 : 

재료의 개수 N개와 각 재료마다 고유 번호가 주어진다. 또한 갑옷을 한 개 만들기 위해 필요한 고유번호의 합 M이 주어진다.

재료들을 2개씩만 합쳐서 갑옷을 만들 수 있는 개수를 찾는 문제이다.

 

 

 


  • 풀이 :

투포인터의 기본적인 문제이다.

오름차순 또는 내림차순으로 정렬한 후, 양쪽 끝 값을 더하며 M보다 작다면 작은쪽의 인덱스를 변화시키고 크다면 큰 쪽의 인덱스를 변화시키면 된다.

 

 

 


  • 소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from itertools import combinations
 
if __name__ == "__main__":
    n = int(input())
    M = int(input())
    nums = sorted(list(map(int,input().split())))
    cnt = 0
    front = 0
    rear = n-1
    while front<rear:
        if nums[front] + nums[rear] == M:
            cnt +=1
            front +=1
            rear -=1
        elif nums[front]+nums[rear] < M:
            front +=1
        else:
            rear -=1
 
    
    print(cnt)
 
cs
320x100
댓글
© 2022 WonSeok, All rights reserved