alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 1940 주몽_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 1940 주몽_파이썬

알파이 2020. 10. 12. 08:05

 

1940 주몽    www.acmicpc.net/problem/1940

 

1940번: 주몽

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

www.acmicpc.net

 

 

 

문제 풀기 전 공부할 것 : 정렬, 투 포인터

 

 

 

 

 

 

 

풀이

<내용>

  • 고유한 번호를 정렬한다.
  • 양끝 값에서(i = 0, j = n-1) 시작해서 둘의 합이 m과 같으면 cnt에 1을 더하고 위치를 하나씩 옮긴다.(i = i + 1, j = j - 1)
  • 양끝 값에서 시작해서 둘의 합이 m보다 작으면 왼쪽의 작은 값을 크게 만들어야 한다.(i = i + 1)
  • 양끝 값에서 시작해서 둘의 합이 m보다 크면 왼쪽의 큰 값을 작게 만들어야 한다.(j = j - 1)

 

 

<코드>

n = int(input())
m = int(input())
nums = list(map(int, input().split()))
nums.sort()
cnt = 0
i, j = 0, n-1
while i < j:
    if nums[i] + nums[j] == m:
        cnt += 1
        i += 1
        j -= 1
    elif nums[i] + nums[j] < m:
        i += 1
    else:
        j -= 1
        
print(cnt)

 

 

 

 

 

 

728x90
반응형
Comments