https://www.acmicpc.net/problem/1940
백준 2018번과 비슷하게 숫자를 변수로 지정해 푸는 문제로 두 수를 더해서 특정 숫자로 만드는 경우가 몇 갠지 묻는다.
코드를 단순 구현하듯이 쓰다가 정렬을 해야지만 숫자를 포인터로 지정할 수 있겠다 싶었다.
파이썬은 sort함수를 사용하면 오름차순으로 정렬해준다.
첫 번째 숫자를 리스트의 맨 처음, 두 번째 숫자를 맨 마지막으로 지정해 준다
합해서 만들어야 하는 숫자가 10이라고 하자.
first
1 | 3 | 4 | 7 | 10 | 11 |
second
first + second > 10 일 때 second를 한 칸 당긴다.
first
1 | 3 | 4 | 7 | 10 | 11 |
second
first
1 | 3 | 4 | 7 | 10 | 11 |
second
first + second < 10 이므로 first를 당겨준다.
first
1 | 3 | 4 | 7 | 10 | 11 |
second
first + second = 10이므로 first와 second를 둘 다 당겨준다.(count += 1)
first
1 | 3 | 4 | 7 | 10 | 11 |
second
반복조건은 first > second 이면 반복을 종료한다.(first >= second도 된다.)
손으로 위의 예시를 써보거나 간단한 예시 하나 만들어서 해보면 이해가 쉬울 것이다.
코드는 다음과 같다.
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
num = list(map(int, input().split()))
count = 0
num.sort()
i = 0
j = N-1
## 반복하며 카운트
while num[i] < num[j]:
first = num[i]
second = num[j]
if first + second < M:
i += 1
elif first + second > M:
j -= 1
else:
count += 1
j -= 1
i += 1
print(count)
글에 대한 조언, 질문 모두 환영합니다.
'📚알고리즘 > 백준' 카테고리의 다른 글
[백준 12891번] DNA 비밀번호 (Python/파이썬) (1) | 2023.01.15 |
---|---|
[백준 1253번] 좋다 (Python/파이썬) (0) | 2023.01.09 |
[백준 2018번] 수들의 합 5 (파이썬/Python) (0) | 2023.01.07 |
[백준 10986번] 나머지 합 (Python/파이썬) (0) | 2023.01.07 |
[백준 11660번] 구간 합 구하기5 (Python/파이썬) (1) | 2023.01.03 |