Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions 2주차/1920번.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
def binary_search(array, elem):
#left, right 값 초기화
left, right = 0, len(array) - 1

#왼쪽 인덱스가 오른쪽 인덱스보다 작거나 같을 동안 반복
while left <= right:
mid = (left + right) // 2
#중간 값이 찾고자 하는 값과 같다면, 1 반환하고 종료
if array[mid] == elem:
return 1
#만약 중간 값이 찾는 값보다 작다면, 왼쪽 범위를 중간 값의 오른쪽으로 1씩 조정
elif array[mid] < elem:
left = mid + 1
#중간 값이 찾고자 하는 값보다 크다면, 오른쪽 범위를 중간 값의 왼쪽으로 1씩 조정
else:
right = mid - 1
return 0

#입력으로부터 정수 n 받기
n = int(input())
a_list = list(map(int, input().split()))
#입력으로부터 정수 m 받기
m = int(input())
x_list = list(map(int, input().split()))

#리스트 정렬
a_list.sort()

for x in x_list:
print(binary_search(a_list, x))
38 changes: 38 additions & 0 deletions 2주차/2110번.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import sys

input = sys.stdin.readline
# map 함수를 사용하여 입력된 값을 공백 기준으로 나눈 결과를 정수로 변환하여 각각 저장
N, C = map(int, input().split())
#N개의 집 좌표를 입력받고, 각 좌표를 정수로 변환 후 sorted 함수로 정렬하여 home에 저장
home = sorted([int(input()) for _ in range(N)])

# 공유기가 설치될 수 있는 최대 거리를 받아 해당 거리로 공유기를 설치했을 때의 개수를 세는 함수를 정의
# count 는 공유기의 개수 저장, current 는 현재 집의 좌표
def count_routers(distance):
count, current = 1, home[0]

for h in home:
if h - current >= distance:
count += 1
current = h

return count

# 이진 탐색을 위한 시작점과 끝점 설정, 시작점은 항상 1, 끝점은 정렬된 집의 좌표 중 가장 뒤에 있는 좌표에서 가장 앞에 있는 좌표를 뺀 값
start, end = 1, home[-1] - home[0]
# result 는 공유기 사이의 최대 거
result = 0

# 시작점이 끝점보다 작거나 같은 동안 계속 반복, 중간지점 mid 계산
while start <= end:
mid = (start + end) // 2

# 중간 지점으로 공유기를 설치했을 때의 개수가 목표 개수보다 크거나 같다면, 현재의 중간 값을 결과로 저장
# 시작점을 중간값보다 +1로 갱신, 그렇지 않다면 끝점을 중간 값보다 -1로 갱신
if count_routers(mid) >= C:
result = mid
start = mid + 1
else:
end = mid - 1

print(result)