본문 바로가기

Python69

[Algorithm] 이분탐색(Binary search algorithm, 이진 검색 알고리즘) 이분탐색이란? 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이다. 재귀와 반복문으로 구현할 수 있다.  재귀 함수로 구현한 이분 탐색def binary_search(array,target,start,end): if start > end: return None mid = (start + end)//2 if array[mid] == target: return mid elif array[mid] > target: return binary_search(array,target,start,mid-1) else: r.. 2025. 1. 16.
99클럽 코테 스터디 3일차 TIL + 백준 11663 선분 위의 점 (파이썬) ※ 11663 선분 위의 점https://www.acmicpc.net/problem/11663문제 해결 TIP이분 탐색 변형 문제이다. 처음에 for문으로 돌렸을 때는 역시 시간 초과..아래 입력 함수도 유용하게 써야겠다.import sysN, M = map(int,sys.stdin.readline().split())dot = list(map(int,sys.stdin.readline().split())) 전체 코드import sysN, M = map(int,sys.stdin.readline().split())dot = list(map(int,sys.stdin.readline().split()))dot.sort()def dot_min(start_dot): start = 0 end = N - 1 .. 2025. 1. 15.
99클럽 코테 스터디 2일차 TIL + 백준 1654 랜선 자르기 (파이썬) ※ 1654 랜선 자르기https://www.acmicpc.net/problem/1654문제 해결 TIP처음에 반복문으로 max(랜선길이)까지 탐색하다가 시간 초과 이슈 발생..이분 탐색으로 바꿨더니 성공했다. 전체 코드K, N = map(int,input().split())length = []for i in range(K): length.append(int(input()))start = 1end = max(length)while start = N: start = mid + 1 else: end = mid - 1print(end)비기너 문제 : 그대로 출력하기 2 https://www.acmicpc.net/problem/11719미들러 문제 : 랜선 자르기 https:.. 2025. 1. 14.
99클럽 코테 스터디 1일차 TIL + 백준 2776 암기왕 (파이썬) ※ 2776 암기왕https://www.acmicpc.net/problem/2776  문제 해결 TIP처음에는 수첩 1과 수첩 2를 리스트 형태에 저장하여 풀었지만, 시간 초과 문제가 발생하였다. 이후 in 연산자의 시간 복잡도를 줄여주는 set 를 수첩 1에 사용하여 중복 제거와 비교 연산을 효율적으로 해주었다. 전체 코드T = int(input())for i in range(T): N = int(input()) set_N = set(list(map(int,input().split()))) M = int(input()) list_M = list(map(int,input().split())) for j in list_M: if j in set_N: .. 2025. 1. 13.
[Algorithm] PCCP 기출문제 340213 동영상 재생기 | 프로그래머스 ※ 340213 동영상 재생기https://school.programmers.co.kr/learn/courses/30/lessons/340213 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 해결 TIP모든 시간이 "00:00" 형태로 되어 있어 분과 초를 따로 계산하기 번거롭다. 시간을 모두 초로 변환하여 계산해준다. 전체 코드def change_to_sec(time): minutes, seconds = time.split(':') time = int(minutes)*60 + int(seconds) return timedef solution(video_len,.. 2025. 1. 9.
[Algorithm] 백준 14620 꽃길 | 파이썬 (브루트포스) ※ 14620 꽃길https://www.acmicpc.net/problem/14620 문제 해결 TIP메인 로직은 backtrack안의 for문이다. 우선 첫번째 꽃을 심는다. 이후 두번째 꽃은 가능한 모든 위치에 심으면서 최소 비용이 나오는지 확인한다. 세번째 꽃도 가능한 모든 위치에 심으면서 최소 비용이 나오는지 확인한다. 이후, 꽃을 다시 뽑고, 첫 번째 꽃은 다른 위치에 심고 다시 반복 진행한다. 전체 코드N = int(input())money_graph = [list(map(int, input().split())) for _ in range(N)]visited = [[False] * N for _ in range(N)]dx = [0, 0, 1, -1]dy = [1, -1, 0, 0]# 꽃을 심을.. 2024. 9. 21.
[Algorithm] 백준 4485 녹색 옷 입은 애가 젤다지? | 파이썬 (다익스트라) ※ 4485 녹색 옷 입은 애가 젤다지?https://www.acmicpc.net/problem/4485 문제 해결 TIP다익스트라를 2차원 배열 형태에 적용해보자. 전체 코드import heapq# 방향 설정: 상, 하, 좌, 우dx = [0, 0, -1, 1]dy = [-1, 1, 0, 0]def dijkstra(n, graph): # 비용 테이블을 무한대로 초기화 distance = [[float('inf')] * n for _ in range(n)] distance[0][0] = graph[0][0] # 우선순위 큐에 시작점 넣기 (비용, 좌표) queue = [(graph[0][0], 0, 0)] while queue: dist, x, y = heap.. 2024. 9. 11.
[Algorithm] 백준 1261 알고스팟 | 파이썬 BFS ※ 1261 알고스팟https://www.acmicpc.net/problem/1261 문제 해결 TIP이전 미로만들기와 동일한 문제이다. n, m 값의 범위만 재설정해준다. 전체 코드from collections import dequedx = [0,0,-1,1]dy = [-1,1,0,0]def bfs(x,y): queue = deque() queue.append((x,y)) visited = [[-1] * m for _ in range(n)] visited[x][y] = 0 while queue: x, y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + .. 2024. 9. 11.
[Algorithm] 백준 2665 미로만들기 | 파이썬 BFS ※ 2665 미로만들기https://www.acmicpc.net/problem/2665 문제 해결 TIPvisited 배열에 흰 방으로 바꾸어야 할 최소의 검은 방의 수를 저장한다. bfs로 탐색하면서, 흰 방인 경우를 먼저 탐색한다.(appendleft) 검은 방일 경우에는 이전 visited값에 1을 추가해준다. 전체 코드from collections import dequedx = [0,0,-1,1]dy = [-1,1,0,0]def bfs(x,y): queue = deque() queue.append((x,y)) visited = [[-1] * n for _ in range(n)] visited[x][y] = 0 while queue: x, y = queue.p.. 2024. 9. 11.