poow810
article thumbnail
Boj. 20437 문자열 게임2
알고리즘 2025. 3. 18. 13:26

Approach 1 ❌left, right 조절해가면서 가장 긴 문자열과 짧은 문자열을 구하려고 했지만, 시간초과가 났다.Approach 2 ⭕그렇다면 문자열의 인덱스를 딕셔너리에 넣어두면 되지 않을까? 생각슬라이딩 윈도우를 활용해야겠다는 것은 알았지만, 구현이 안돼서 코드를 참고했다. 머리론 아는데,,, 구현이 안됨구간은 끝값 - 시작값 + 1로 하고, dictionary에 담아둔 인덱스 리스트를 돌면서 length를 구했다.Solution 💡import sysT = int(sys.stdin.readline().strip())for _ in range(T): W = sys.stdin.readline().strip() K = int(sys.stdin.readline().strip()) ..

article thumbnail
Boj.2467 용액
알고리즘 2025. 3. 17. 17:25

Problem 💻Approach리스트가 정렬되어 주어지고, 두 값을 합해서 0에 가까운 수를 찾아야했기에, left와 right를 하나씩 탐색해야겠다 생각해서 투포인터 알고리즘을 사용하였다.while문 조건 값 항상 잘 확인하기!두 용액의 값을 구해야하기 때문에 left = right까지 돌리면 안된다!while left Solution 💡import sysN = int(sys.stdin.readline().strip())lst = list(map(int, sys.stdin.readline().split()))left = 0right = len(lst) - 1answer_left, answer_right = 0, 0count = 1e99 while left 0: right -= 1 ..

article thumbnail
99클럽 코테 스터디 18일차 TIL Boj 1003. 피보나치 함수
알고리즘 2025. 2. 17. 23:15

Approach처음에 그냥 피보나치 문제인 줄 알고 dfs로 풀어버렸는데 시간초과가 났다.하나의 dp 배열로 기록해도 됐지만, 오랜만에 메모이제이션 문제를 풀다 보니 좀 더 직관적으로 풀기 위해 zero와 one 두 개의 배열을 선언했다.나머지는 알다시피 dp로 바텀업 방식을 활용하여 문제를 해결하였다.Solution 💡import sysdef fibo(n): zero[0], one[0] = 1, 0 zero[1], one[1] = 0, 1 for i in range(2, n+1): zero[i] = zero[i-1] + zero[i-2] one[i] = one[i-1] + one[i-2]T = int(sys.stdin.readline().strip())for ..

article thumbnail
99클럽 코테 스터디 17일차 TIL Boj 19598. 최소 회의실 개수
알고리즘 2025. 2. 14. 23:03

Approach그리디스러운 문제 유형과 시간을 정렬해야 한다는 것을 보고 우선순위 큐를 떠올렸다.우선 시작 시간을 기준으로 정렬을 한 뒤, 배열을 순회하면서 힙에 종료 시간을 기준으로 우선순위 설정을 해주었다.이렇게 한다면, 종료 시각이 긴 강의실은 끝까지 힙에 존재할 것이고, 앞에서부터 사용한 순서대로 교체될 것이기 때문에 최종적으로 힙의 길이만큼을 출력한다면 강의실의 개수가 된다.Solution 💡import sysfrom heapq import heappop, heappushN = int(sys.stdin.readline().strip())lst = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]lst.sort(key=lambda..

article thumbnail
99클럽 코테 스터디 16일차 TIL Boj 17503. 맥주 축제
알고리즘 2025. 2. 12. 18:39

Approach특정 개수에 대한 최솟값을 보자마자 우선순위 큐를 생각했었다.입력 크기를 생각했을 때 투포인터 방식으로도 해결할 수 있을 것 같은데, 일단 구현이 쉬운 우선순위 큐로 구현하고자 했다.도수로 정렬한 뒤, N개 만큼 힙에 넣고 선호도보다 크면 하나 빼는 방식으로 구현하였다.Solution 💡import sysfrom heapq import heappop, heappushN, M, K = map(int, sys.stdin.readline().split())lst = [list(map(int, sys.stdin.readline().split())) for _ in range(K)]hq = []lst.sort(key=lambda x: x[1])preference = 0level = -1for pr..

article thumbnail
99클럽 코테 스터디 15일차 TIL Boj 11399. ATM
알고리즘 2025. 2. 11. 21:56

Approach문제를 읽으면 알 수 있듯이, 정렬이 된 상태에서 누적합처럼 더해주면 구할 수 있다.배열 선언보다는 변수 설정을 하나 해놓고 더해간다면 메모리를 더 줄일 수 있지 않을까 생각된다.Solution 💡import sysN = int(sys.stdin.readline().strip())lst = list(map(int, sys.stdin.readline().split()))lst.sort()sum_lst = [0]*Nsum_lst[0] = lst[0]for i in range(1, N): for j in range(i+1): sum_lst[i] += lst[j]print(sum(sum_lst))

article thumbnail
99클럽 코테 스터디 14일차 TIL Boj 2615. 오목
알고리즘 2025. 2. 6. 23:07

Approach알고리즘 자체는 어렵지 않은 완전 탐색 문제이다약 30분정도 걸렸는데, 세부 조건들을 조금 더 자세히 읽었다면 더 빠르게 풀지 않았을까 싶다….count로 5목인지 세면서 count == 5를 했었는데, 이렇게 되면 완전 탐색이기 때문에 아래쪽 탐색 중 count가 5여도, 반대방향에서 같은 돌이 더 있을 수도 있기 때문에 이 조건 때문에 조금 애를 먹었다.Solution 💡import sysdef is_valid(nx, ny): return 0

article thumbnail
99클럽 코테 스터디 12일차 TIL Boj 1051. 숫자 정사각형
알고리즘 2025. 2. 4. 23:17

Approach정사각형의 최댓값을 찾아야했으므로, 안쪽이 아닌 바깥쪽부터 탐색을 시작했다.크기가 그렇게 크지 않기 때문에, 모든 배열을 탐색하였다.Solution 💡import sysdef find_squre(s): for i in range(N-s+1): for j in range(M-s+1): if mp[i][j] == mp[i][j+s-1] == mp[i+s-1][j] == mp[i+s-1][j+s-1]: return TrueN, M = map(int, sys.stdin.readline().split())mp = [list(map(int, sys.stdin.readline().strip())) for _ in range(N)]chec..

article thumbnail
99클럽 코테 스터디 11일차 TIL Boj 1018. 체스판 다시 칠하기
알고리즘 2025. 2. 3. 22:20

ApproachN, M의 크기가 8 ≤ N, M ≤ 50이었기 때문에, 완전탐색 문제라고 생각했다.8칸짜리 체스판을 만들어야하기 때문에, 범위를 N-7, M-7로 주었다.단순히 짝수칸과 홀수칸을 백, 흑으로 바꿔주면서 카운팅하면 됐기에 구현은 그렇게 어렵지 않았다.Solution 💡import sys N, M = map(int, sys.stdin.readline().split())mp = [list(map(str, sys.stdin.readline().strip())) for _ in range(N)]answer = 1e99for j in range(N - 7): for k in range(M - 7): white = 0 black = 0 for i in ra..

article thumbnail
99클럽 코테 스터디 10일차 TIL Boj 2573. 빙산
알고리즘 2025. 1. 25. 00:24

Approach문제 조건을 나누어 보았을 때, 빙하의 인접한 칸 개수 확인 / 인접 개수만큼 빙하 녹기 / 빙하의 덩어리 확인으로 나눌 수 있었다.기능별 각각의 함수로 나누어 작성하였다.Solution 💡import sysfrom collections import dequedef is_valid(nx, ny): return 0 0: count += 1 melt(i, j) if count == 0: print(0) break for i in range(N): for j in range(M): if mp[i][j] > sea[i][j]: ..