Algorithm 87

쿠폰 수집가 문제 (Coupon Collector Problem)

Photo by Janis Fasel on Unsplash 포켓몬 빵을 기억하시나요? 지금도 파는지는 잘 모르겠습니다만, 제가 어릴 적만 하더라도 큰 인기가 있던 빵이었습니다. 특히 그 빵이 인기가 있던 이유는 빵을 사면 그 안에 동봉되어 있던 포켓몬 "띠부띠부 씰" 때문이었다고 생각합니다. 대개는 플라스틱 책받침에 씰을 모았고, 개중에서 모으는 데 진심인 친구들은 클리어 파일에다가 씰을 붙여서 모았죠. 저도 책받침에다가 몇 개 모았던 기억이 있습니다. 씰을 모으던 아이들의 목표는 당연히 모든 씰을 모으는 것이었을 겁니다. 당시 포켓몬은 255마리였던 것으로 기억합니다. 여기서 한 가지 의문점이 생기죠. 과연 아이들은 몇 개의 빵을 사 먹어야 모든 포켓몬 씰을 모을 수 있었을까요? 정말로 운이 좋은 경우..

백준 코딩테스트 1697 숨바꼭질

https://www.acmicpc.net/problem/1697 BFS(너비 우선 탐색)을 사용하여 수빈이가 동생을 찾는 최소 시간을 구하는 문제from collections import dequedef bfs(start, target): # 최대 범위 설정 (문제 조건에서 수빈이와 동생의 위치는 0 이상 100000 이하) max_range = 100000 # 방문 여부 및 시간을 저장하는 리스트 visited = [0] * (max_range + 1) queue = deque([start]) while queue: current = queue.popleft() # 큐에서 현재 위치를 꺼냄 if current ==..

Algorithm/백준 2024.07.30

항해99 리부트코스 알고리즘 2주 5일차 백준 10815 숫자 카드

https://www.acmicpc.net/problem/10815 def main(): import sys input = sys.stdin.read data = input().split() n = int(data[0]) # 숫자 카드의 개수 cards = set(map(int, data[1:n + 1])) # 숫자 카드 목록을 집합으로 저장 m = int(data[n + 1]) # 확인할 숫자의 개수 targets = list(map(int, data[n + 2:])) # 확인할 숫자 목록 result = [] for target in targets: if target in cards: resu..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 5일차 백준 2606 바이러스

https://www.acmicpc.net/problem/2606 def dfs(graph, start, visited): stack = [start] # 스택에 시작 노드를 추가 count = 0 # 방문한 노드 수를 세기 위한 변수 while stack: node = stack.pop() # 스택에서 노드를 꺼냄 if not visited[node]: # 노드가 방문되지 않았다면 visited[node] = True # 방문 처리 count += 1 # 방문한 노드 수 증가 stack.extend(graph[node]) # 노드에 연결된 노드들을 스택에 추가 return..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 5일차 백준 18352 특정 거리의 도시 찾기

https://www.acmicpc.net/problem/18352 from collections import dequedef find_cities_at_distance(n, m, k, x, roads): # 그래프 초기화 graph = [[] for _ in range(n + 1)] for road in roads: a, b = road graph[a].append(b) # 도로 정보로 그래프 구축 # 거리 저장 배열 초기화 distance = [-1] * (n + 1) distance[x] = 0 # 시작 도시의 거리는 0으로 설정 # BFS를 위한 큐 초기화 queue = deque([x]) while..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 5일차 백준 7562 나이트의 이동

https://www.acmicpc.net/problem/7562 from collections import dequedef bfs(start, end, l): # 나이트의 이동 방향 8가지 정의 directions = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)] # 방문 여부를 저장하는 2차원 리스트 visited = [[False] * l for _ in range(l)] # BFS를 위한 큐, 초기 위치와 이동 횟수를 함께 저장 queue = deque([(start[0], start[1], 0)]) # (x, y, 이동 횟수) while queue: x,..

Algorithm/백준 2024.07.29

항해99 리부트코스 알고리즘 2주 4일차 백준 13116 30번

https://www.acmicpc.net/problem/13116 def find_lca(a, b): # 주어진 노드 a와 b의 경로를 추적 path_a = [] path_b = [] # 루트 노드부터 a까지의 경로 while a >= 1: path_a.append(a) a //= 2 # 루트 노드부터 b까지의 경로 while b >= 1: path_b.append(b) b //= 2 # 공통 조상 찾기 path_a = set(path_a) for node in path_b: if node in path_a: return node# 입력을 처리하여 문제를..

Algorithm/백준 2024.07.27

lambda 함수란?

lambda 함수란? lambda 함수는 파이썬에서 익명 함수(이름이 없는 함수)를 생성하기 위해 사용된다. lambda 함수는 간단한 함수를 정의할 때 유용하다 일반 함수와 lambda 함수의 차이는 다음과 같다:일반 함수는 def 키워드를 사용하여 정의되며, 이름이 있다.lambda 함수는 lambda 키워드를 사용하여 정의되며, 이름이 없다.람다 함수 문법은lambda 인자들: 표현식인자들: 함수가 받을 인자들표현식: 함수가 반환할 값 ex)# 일반 함수def add(x, y): return x + y# lambda 함수add_lambda = lambda x, y: x + y# 사용print(add(2, 3)) # 출력: 5print(add_lambda(2, 3)) # 출력: 5 ..