https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
교재 실전문제 2번의 7-5번 풀이와 아주 유사한 문제 유형! 이어서 여유를 가지고 풀어봤
지만
ㅋ


?뭐가 틀린거임? 교재 코드 거의 똑같이 참고했구만

보니까

우선 15번째 줄에서 들여쓰기가 잘못됨. while문을 다 돌고 나와서 답을 찾을 수 없으면 그때 None을 반환하는게 맞음.
근데 이렇게 고치고 제출했더니 시간초과 뜨고
런타임 에러도 뜨고...
다른 사람들 풀이를 봐도 다 거의 이런식으로 풀었더만 왜 나만 통과 안시켜줘ㅠㅠ! 하고 있었는데
array를 sorting 시킨 부분의 위치가 문제였다.
import sys
input = sys.stdin.readline
N = int(input())
array = list(map(int, input().split()))
array.sort()
M = int(input())
check = list(map(int, input().split()))
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None
for i in check:
result = binary_search(array, i, 0, N - 1)
if result != None:
print(1)
else:
print(0)
처음에는 밑의 for문 안에서 binary_search() 호출할 때 sorted(array) 해줬어서 for문 돌 때마다 array를 정렬시켜준 뒤 인자로 넘겨줘야 해서 더 오래 걸렸던 것. 이렇게 고치니까 맨 위에서 한 번만 정렬시켜주면 된다.!
사실 이게 문제이려나? 싶어서 중간에 이렇게 수정해봤었는데, 괜히 다른 부분에서 시간 줄이겠다고 list를 set으로 바꾸고(set은 sort가 안됨 순서가 없어서..) 난리를 쳤더니 런타임 에러 뜬 거였음ㅎ
암튼 해결 !!
'알고리즘 > 백준 풀이' 카테고리의 다른 글
[백준/Python] #2839 : 설탕 배달 - 다이나믹 프로그래밍 (0) | 2023.05.25 |
---|---|
[백준/Python] #9095 : 1, 2, 3 더하기 - 다이나믹 프로그래밍 (0) | 2023.05.25 |
[백준/Python] #2309 : 일곱 난쟁이 (0) | 2023.05.18 |
[백준/Python] #1260 : DFS와 BFS - DFS/BFS (1) | 2023.04.13 |
[백준/Python] #2941 : 크로아티아 알파벳 - 구현 (0) | 2023.03.23 |
https://www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
교재 실전문제 2번의 7-5번 풀이와 아주 유사한 문제 유형! 이어서 여유를 가지고 풀어봤
지만
ㅋ


?뭐가 틀린거임? 교재 코드 거의 똑같이 참고했구만

보니까

우선 15번째 줄에서 들여쓰기가 잘못됨. while문을 다 돌고 나와서 답을 찾을 수 없으면 그때 None을 반환하는게 맞음.
근데 이렇게 고치고 제출했더니 시간초과 뜨고
런타임 에러도 뜨고...
다른 사람들 풀이를 봐도 다 거의 이런식으로 풀었더만 왜 나만 통과 안시켜줘ㅠㅠ! 하고 있었는데
array를 sorting 시킨 부분의 위치가 문제였다.
import sys
input = sys.stdin.readline
N = int(input())
array = list(map(int, input().split()))
array.sort()
M = int(input())
check = list(map(int, input().split()))
def binary_search(array, target, start, end):
while start <= end:
mid = (start + end) // 2
if array[mid] == target:
return mid
elif array[mid] > target:
end = mid - 1
else:
start = mid + 1
return None
for i in check:
result = binary_search(array, i, 0, N - 1)
if result != None:
print(1)
else:
print(0)
처음에는 밑의 for문 안에서 binary_search() 호출할 때 sorted(array) 해줬어서 for문 돌 때마다 array를 정렬시켜준 뒤 인자로 넘겨줘야 해서 더 오래 걸렸던 것. 이렇게 고치니까 맨 위에서 한 번만 정렬시켜주면 된다.!
사실 이게 문제이려나? 싶어서 중간에 이렇게 수정해봤었는데, 괜히 다른 부분에서 시간 줄이겠다고 list를 set으로 바꾸고(set은 sort가 안됨 순서가 없어서..) 난리를 쳤더니 런타임 에러 뜬 거였음ㅎ
암튼 해결 !!
'알고리즘 > 백준 풀이' 카테고리의 다른 글
[백준/Python] #2839 : 설탕 배달 - 다이나믹 프로그래밍 (0) | 2023.05.25 |
---|---|
[백준/Python] #9095 : 1, 2, 3 더하기 - 다이나믹 프로그래밍 (0) | 2023.05.25 |
[백준/Python] #2309 : 일곱 난쟁이 (0) | 2023.05.18 |
[백준/Python] #1260 : DFS와 BFS - DFS/BFS (1) | 2023.04.13 |
[백준/Python] #2941 : 크로아티아 알파벳 - 구현 (0) | 2023.03.23 |