https://www.acmicpc.net/problem/1940
1940번: 주몽
첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고
www.acmicpc.net
코드
import sys
def binary_search(list, target, start, end):
while start <= end:
mid = (start + end) // 2
if target == list[mid]:
return 1
elif target > list[mid]:
start = mid + 1
else:
end = mid - 1
return 0
N = int(sys.stdin.readline().rstrip())
M = int(sys.stdin.readline().rstrip())
n_list = list(map(int, sys.stdin.readline().rstrip().split()))
cnt = 0
n_list.sort()
for i in n_list:
m = M - i
cnt += binary_search(n_list, m, 0, N-1)
print(cnt//2)
이 문제를 보자마자 어제 배운 이진탐색을 이용하고 싶었습니다.
https://cuckoobird.tistory.com/17
[Python] 백준 1920번 - '수 찾기' 풀이 + 이진탐색 (이분탐색)
https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음
cuckoobird.tistory.com
이진탐색 문제를 풀이한 해당 글입니다.
그래서 제가 구성한 풀이방법은
1. 배열을 정렬하자
2. m 이라는 변수에 M - 배열[i] 를 저장하여 두가지 재료중 나머지 하나를 알아내자
3. 변수 m 을 알아내는 방법은 이진탐색을 이용하여 리턴값을 cnt에 저장하자 -> cnt는 결과의 두배일테니 //2를 하자
였습니다. 생각을 쓰고 코드로 적으니 정답이 나오네요.
후기
좀 더 복잡한 문제를 풀었어야 했나 생각이 들기도 하지만 배운 것을 생각한 것 만해도 잘 했다는 생각이 들고 뿌듯하네요. ㅎㅎ 생각이 정답으로 도출되어 기쁘고 즐겁습니다.
'코딩테스트' 카테고리의 다른 글
[C] 백준 2525번 - '오븐 시계' 풀이 (0) | 2023.01.13 |
---|---|
[C] 백준 1459번 - '걷기' 풀이 (0) | 2023.01.13 |
[Python] 백준 1920번 - '수 찾기' 풀이 + 이진탐색 (이분탐색) (0) | 2023.01.12 |
[Python] 백준 2839번 - '설탕 배달' 풀이 (0) | 2023.01.11 |
[Python] 백준 1316번 - '그룹 단어 체커' 풀이 (0) | 2023.01.10 |