Algorithm 85

백준 코딩테스트 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 ..

항해99 리부트코스 알고리즘 2주 3일차 백준 1181 단어 정렬

https://www.acmicpc.net/problem/1181    단어 목록이 주어졌을 때, 단어를 정렬하는 프로그램을 작성정렬 기준은 두 가지다길이가 짧은 것부터길이가 같으면 사전 순으로  즉,  주어진 단어 목록에서 중복을 제거중복이 제거된 단어 목록을 정렬(정렬의 기준은 단어의 길이, 단어 자체) 해야 한다.   1.단어 목록을 입력받고2.중복을 제거3.정렬된 단어 목록을 출력 순으로 코드를 작성해보자  import sysinput = sys.stdin.read# 입력 받기data = input().split()n = int(data[0])words = data[1:]# 중복 제거unique_words = list(set(words))# 정렬unique_words.sort(key=lambda ..

Algorithm/백준 2024.07.26

항해99 리부트코스 알고리즘 2주 3일차 백준 18870 좌표 압축

https://www.acmicpc.net/problem/18870  주어진 좌표 리스트에서 각 좌표를 압축하여 새로운 좌표 리스트를 만듦압축된 좌표는 각 좌표의 크기 순서에 따라 번호를 매기는 방식예, 주어진 좌표가 [2, 4, -10, 4, -9]라면, 이 좌표를 크기 순으로 정렬하면 [-10, -9, 2, 4, 4]가 된다. 이때 압축된 좌표는 [2, 4, 0, 4, 1]입니다.접근 방법 주어진 좌표 리스트에서 중복을 제거하고 정렬하여 순위를 매긴다원래 좌표 리스트에서 각 좌표의 압축된 값을 찾는다. 즉, 이를 순서대로 구체적으로 표현하면 다음과 같다.  좌표 리스트를 입력받는다중복을 제거한 후 정렬된 좌표 리스트를 만든다정렬된 좌표 리스트를 이용해 각 좌표의 압축된 값을 딕셔너리에 저장원래 좌표 ..

Algorithm/백준 2024.07.26