# 답 N = int(input()) k = int(input()) lo = 1 hi = N * N mi = (lo + hi) // 2 while lo
전체 글
# 답 import sys input = sys.stdin.readline N, C = map(int, input().split()) home = [int(input()) for _ in range(N)] home.sort() lo = 1 hi = home[-1] - home[0] mi = (lo + hi) // 2 while lo = pre + mi: pre = i cnt += 1 if cnt >= C: lo = mi + 1 else: hi = mi - 1 mi = (lo + hi) // 2 print(mi) # 풀이 과정 이분 탐색을 이용해 풉니다. 1) 이 문제에서 요구하는 답은 '공유기 사이의 최단거리의 최댓값'입니다. 즉 '공유기 사이의 거리'를 구해야합니다. '공유기 사이의 거리'는 최소 1 ..
# 답 import sys board = [list(map(int, sys.stdin.readline().split())) for _ in range(9)] zero = [] for y in range(9): for x in range(9): if not board[y][x]: zero.append((y, x)) def is_sudoku(ty, tx, n): y = (ty // 3) * 3 x = (tx // 3) * 3 for i in range(9): # 가로줄 확인 if board[ty][i] == n: return False # 세로줄 확인 if board[i][tx] == n: return False # 3 * 3 확인 if board[y + i // 3][x + i % 3] == n: retu..
# 답 K, N = map(int, input().split()) lan = [int(input()) for _ in range(K)] lo = 1 hi = max(lan) mi = (lo + hi) // 2 while lo = N: if lo == mi: lo += 1 else: lo = mi elif tot < N: if hi == mi: hi -= 1 else: hi = mi mi = (lo + hi) // 2 print(mi) ~~ # 풀이 파라메트릭 서치로 푸는 대표적인 문제입니다. 파라메트릭 서치는 이분 탐색과 거의 유사한 알고리즘인데요. 차이점은, 이분 탐색은 탐색범위를 좁혀나가다가 정답을 발견하면 바로 함수를 빠져나오는 반면, 파라메트릭 서치는 더 이상 살펴볼 것이 없을 때까지 함수를 종료..
N이 소수인지 판별하기 - 2부터 루트 N 까지의 수로 모두 나누어 보고, 한 번이라도 나누어 떨어지면 소수가 아닙니다. - 반복문을 빨리 돌기 위해서는 2부터 루트 N 까지의 수들 중 (2를 포함한)홀수 또는 소수로만 나누는 방법을 생각할 수 있습니다. def is_prime(N): if N < 2: return False for i in range(2, int(N ** 0.5) + 1): if not(n % i): return False return True N보다 작은 소수 구하기 에라토스테네스의 체 알고리즘을 사용합니다. 1단계) N + 1 크기의 chk 배열을 만들고 True로 초기화합니다. True는 이 수가 소수가 맞다는 의미입니다. 2단계) 2부터 루트 N까지의 수들 중 소수(chk[i]..