전체 글 170

[이분탐색] 백준 2110. 공유기 설치

문제 문제 해석 n개의 집들에, c개의 공유기를 설치하고자 한다. 한 집에 하나씩 설치하고, 가장 멀리씩 설치할 때 가장 인접한 거리로 설치된 간격을 출력하라. 주요 변수 low, high : 탐색 범위 * high는 집의 끝과 끝에 설치했을 때가 가장 멀고, 공유기의 개수가 가장 적게 설치될 때의 간격인데 문제 조건에서 공유기가 2개 이상 주어진다고 했기 때문에 high는 양 끝집을 설치했을 때보다 길 수 없다. idx : 직전에 설치된 집의 좌표 mid : (띄워야 하는) 공유기의 최소 간격에 대한 변수 최종 코드 # 집 n개 # 공유기 c개 # 한 집에 하나, 가장 멀리씩 설치 max d import sys input = sys.stdin.readline n,c = map(int, input().s..

⚡️algorithm 2022.05.16

[이분탐색] 백준 6236. 용돈관리

문제 바로가기 문제 해석 하루 사용하는 금액과, 돈을 인출할 수 있는 횟수가 주어짐. 인출 횟수를 꼭 맞추고 하루 돈 소비량을 충족시킬 수 있는 최소 인출금액(mid로 탐색)을 구해라. 단, 인출 금액은 고정되고 돈이 부족하면(오늘 쓸 돈이 더 많으면) 입금했다가 재인출 주요 변수 기간 : n 인출 횟수 : m 매일 쓰는 금액 : cost list 탐색범위 low : 매일 쓰는 금액의 최대값으로 맞춰준다, 문제 조건 N

⚡️algorithm 2022.05.16

[문자열, 파이썬] 최장 공통 부분 문자열

LCS(Longest Common Substring) 최장 공통 부분 문자열로, 공통 문자열 중 가장 길이가 긴 것을 찾아내는 알고리즘이다. DP나 Graph 문제 풀 때 비슷한 문제를 꽤나 풀었던 거 같은데, 다시 푸니 아예 생각이 안났다. for문을 두 번 쓰는 건 알겠는데, 이차원 그래프를 돌며 각 인덱스에 해당하는 문자를 비교해서 값을 넣는 방식이 어색하다. 기본 문제이기 때문에 자꾸 연습해서 머리를 컴퓨터 방식에 적응되도록 해야겠다 @ㅅ@ a, b = map(list, input().split()) g = list([0]*(len(b)+1) for _ in range(len(a)+1)) ans = 0 for i in range(1,len(a)+1): for j in range(1,len(b)+1..

⚡️algorithm 2022.05.15

[이분탐색] 백준 2512. 예산

https://www.acmicpc.net/problem/2512 예산의 기준상한액을 출력해라. 틀렸는데, 왜 틀렸는 지 모르겠다. 상한액이 e값으로 결정된다. 예시로는 맞는데, ans 할당하는 부분이 틀렸었다. 틀린 코드 from re import S import sys from collections import Counter sys.stdin = open('C:\\tech\\backjoon\\binary\\input.txt','r') input = sys.stdin.readline n = int(input()) arr = Counter(map(int, input().split())) limit = int(input()) # 상한액을 출력하라 ans def getMoney(m): t = 0 for i ..

⚡️algorithm 2022.05.13

[이분탐색] 백준 2805. 나무자르기

문제 https://www.acmicpc.net/problem/2805 이분탐색인 걸 알아보고, 풀어야지만 맞을 수 있는 문제였다. 내 코드는 아무리 개선을 해도, pypy에서만 시간초과가 안 났고, 다른 분 코드를 보니 collections 모듈의 Counter 클래스를 임포트했더라. counter 임포트 보다 나무 자른 길이의 합을 한줄 sum으로 표현한 게 결정적이었다. Counter collections 모듈의 Counter 클래스 https://www.daleseo.com/python-collections-counter/ https://docs.python.org/3/library/collections.html#collections.Counter Counter 클래스는 배열의 값들을 dictio..

⚡️algorithm 2022.05.13

[그리디] 백준 13904. 과제 (feat. heapq)

문제 마감기한 안에 과제를 하루에 하나씩 할 수 있을 때, 최대 점수를 구하라 다른분 코드 보고 플옸다... 하루에 하나씩 풀되, 높은 점수인 거만 고르면 되는 줄 알았는데 기한이 빠른 걸 하는 게 중요한 게 아니고 점수가 높은걸 해야하는 거였다. 예를 들어, 마감기한, 점수할당 1 10 3 30 3 30 3 50 으로 주어졌을 때, 1인 것부터 하는 게 아니라 3인거 3개로 채워야 함. 따라서 value로 sorting 해서 꺼내는 게 포인트였다. 어떤 분은 마감기한 끝 부터 하던데, 이 풀이가 더 의도에 부합하는 것 같다. 나는 while day 로 풀다가 실패했는데, 이 방식으로도 다시 풀어봐야겠다. import sys sys.stdin = open('.//그리디//input3.txt','rt') ..

⚡️algorithm 2022.05.11

[그리디] 백준 1700. 플러그

플러그 자리 없으면 뽑는 건데, 젤 적게 뽑을 때의 횟수 구해라 포인트는, 1. 플러그 검사해서, 꽉차면 하나 뽑고 시작해 (* 대신에 맨마지막에서는 안뽑아야함) 2. 플러그 꽂을 때는, 이미 꽂혀있는 건지 검사 3. 플러그 뽑을 때, 더 나중에 꽂아야 하는 애를 뽑아야함. (어려움, index 크기 비교로 풀었음) n, k = map(int, input().split()) lst = list(map(int, input().split())) plug = [] cnt = 0 for idx in range(k): i = lst[idx] later = -1 res = lst[idx+1:] id = 0 if i in plug: continue while len(plug) == n and id < n and id..

⚡️algorithm 2022.05.11