[Python] 1166번 선물 ✏️ 문제문제 파악 알고리즘이분 탐색 코드n, l, w, h = map(int, input().split())start, end = 0, max(l, w, h)for i in range(100): mid = (start + end) / 2 if (l // mid) * (w // mid) * (h // mid) >= n: start = mid else: end = midprint(start) PS/백준 2024.07.31
[Python] 14627번 파닭파닭 ✏️ 문제문제 파악 알고리즘매개 변수 탐색이분 탐색 코드import sysinput = sys.stdin.readlines, c = map(int, input().split())l = [int(input()) for i in range(s)]best_remain = 0start, end = 1, max(l)while start c: remain += (num - c) * mid best_remain = remain start = mid + 1 elif num == c: best_remain = remain start = mid + 1 else: end = mid - 1print(best_remain) PS/백준 2024.07.31
[Python] 6236번 용돈 관리 ✏️ 문제문제 파악이거 푼다고 시간 진짜 많이 잡아먹었다.... start를 최대값이 아닌 최소값으로 주고 하니 값이 자꾸 안나왔다 ㅠ 알고리즘매개 변수 탐색이분 탐색 코드import sysinput = sys.stdin.readlinen,m = map(int, input().split())amount = [int(input()) for i in range(n)]start, end = max(amount), sum(amount)while start PS/백준 2024.07.30
[Python] 2417번 정수 제곱근 ✏️ 문제문제 파악오랜만에 ez한 문제.. 문제에 힌트가 다 나와있다!가장 작은 정수 q를 원하므로 min을 사용하면 좋다. 알고리즘이분 탐색수학 코드import sysinput = sys.stdin.readlinen = int(input())start, end = 1, nq = nwhile start = n: q = min(q, mid) end = mid - 1 else: start = mid + 1print(q) PS/백준 2024.07.30
[Python] 17266번 어두운 굴다리 ✏️ 문제문제 파악이건 경우의 수를 위치를 기준으로 3가지로 나눠서 생각해야 한다. 0 위치 ~ 가로등[0]의 위치가로등[a]의 위치 ~ 가로등[a+1]의 위치가로등[m-1]의 위치 ~ n 위치 알고리즘구현이분 탐색 코드import sysinput = sys.stdin.readlinen = int(input())m = int(input())location = list(map(int, input().split()))length = 0if m == 1: length = max(location[0], n - location[0])else: for i in range(m): if i == 0: x = location[i] elif i == m-1: x = n - location.. PS/백준 2024.07.30
[Python] 1654번 랜선 자르기 ✏️ 문제문제 파악이분 탐색으로 푸는 대표적인 문제!! 알고리즘매개 변수 탐색이분 탐색 코드k, n = map(int, input().split())lan = sorted([int(input()) for _ in range(k)])left, right = 1, max(lan)while left PS/백준 2024.07.26
[Python] 2512번 예산 ✏️ 문제문제 파악이분 탐색으로 푸는 거의 대표적인 문제!! 알고리즘매개 변수 탐색이분 탐색 코드n = int(input())req = sorted(list(map(int, input().split())))m = int(input())if (sum(req) = req[i]: use += req[i] else: use += mid if use > m: end = mid - 1 else: start = mid + 1 print(end) PS/백준 2024.07.26
[Python] 1072번 게임 ✏️ 문제문제 파악처음에는 int((y / x) * 100) 이렇게 줬는데 계속 틀리길래 찾아보니까 부동소수점 오차 때문에 int((y / x) * 100) 가 아닌 int(y * 100 / x) 이런 식으로 주어야 한다고 한다... 알고리즘수학이분 탐색 코드x,y = map(int, input().split())z = int(y * 100 / x)start, end = 1, xwhile start z: end = mid - 1 else: start = mid + 1if start > x: print(-1)else: print(start) PS/백준 2024.07.26
[Python] 2776번 암기왕 ✏️ 문제문제 파악이 문제는 이분 탐색을 써서 풀 때 함수를 안쓰면 시간 초과가 뜬다 .. (나만 그런가) 그리고 출력이 수첩2에 있는 숫자를 기준으로 1, 0 출력이 되므로 수첩2는 정렬하면 안된다. 수첩1을 정렬하고 수첩1의 요소를 가지고 이분 탐색을 하면 쉽게 풀 수있다. 알고리즘자료 구조정렬이분 탐색해시를 사용한 집합과 맵 코드import sysinput = sys.stdin.readlinedef bs(start, end, note1, i): while start note2[i]: end = mid - 1 else: start = mid + 1 return 0 for _ in range(int(input())): n = int(input()) .. PS/백준 2024.07.26
[Python] 7795번 먹을 것인가 먹힐 것인가 ✏️ 문제 문제 파악처음에는 a 배열을 기준으로 이분 탐색을 하려했는데 생각해보니 a 배열의 각 요소가 b 배열의 요소보다 큰 지 안 큰 지에 대해서 정답을 구하는 것이므로 b 배열을 기준으로 이분 탐색을 하는 것이 맞다!이분 탐색을 하기 위해선 배열이 정렬되어 있어야한다. 위의 예시를 보면 쌍의 개수는 b 배열의 인덱스+1 한 값과 같다는 걸 알 수 있다.while ... if b[mid] 또한 큰 쌍의 개수를 구하므로 end + 1을 해주어야 한다. 알고리즘두 포인터정렬이분 탐색 코드for _ in range(int(input())): n,m = map(int, input().split()) a = sorted(list(map(int, input().split()))) b = sorted.. PS/백준 2024.07.26