전체 글 241

백준 5622번 다이얼

문제 첫 번째 해결방법 A를 0 Z를 25로 보고 각 다이얼(2부터 9까지)에 들어가는 알파벳의 최댓값을 넣어준다. 그 후 7이거나 9일 때는 알파벳이 네 개 들어있으므로, 알파벳의 값이 3 더 작을 때 다이얼의 값보다 1더 큰수를 answer에 더해주고, 나머지의 경우에는 2 더 작을 때 더해주어 출력한다. data = list(input()) num = 2 alpha = [] answer = 0 for i in range(0, 16, 2): result = num + i num += 1 if num < 8: alpha.append((result, num - 1)) elif num < 10: alpha.append((result + 1, num - 1)) else: alpha.append((result..

Algorithm/백준 2022.04.16

[Python] 백준 7576번 토마토(DFS/BFS)

문제 풀이 익은토마토를의 좌표를 찾아 큐에 삽입 상하좌우로 탐색을 진행하면서 이전 좌표값 + 1 한 값을 넣어준다 (상하좌우 다른 수 카운트 되지 않도록) 그 후 다시 큐에 삽입하여 탐색 반복 탐색을 마친 후 그래프에 0이 있다면 모두 익히지 못한 것이므로 0을 출력 0이 없다면, 가장 큰 값 -1 한 값을 출력 (처음 익어있는 토마토는 익히는 일수에 포함되지 않으므로) 코드 from collections import deque n, m = map(int,input().split()) graph = [] dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] for i in range(m): graph.append(list(map(int,input().split()))) # 익은 토마토 찾기..

Algorithm/백준 2022.04.15

[Python] 백준 2178번 미로찾기(DFS/BFS)

문제 풀이 (BFS) 방문여부를 확인 할 별도의 리스트를 만들지 않고 그래프 내에서 연산 수행 상하좌우를 탐색하며, 이동할 때 마다 그래프의 값을 이전 값 + 1로 업데이트 도착 위치의 값 출력 (최단 거리) 코드 from collections import deque r, c = map(int,input().split()) graph = [] for i in range(r): graph.append(list(map(int,input()))) dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] def bfs(y, x): queue = deque() queue.append((y, x)) while queue: y, x = queue.popleft() for i in range(4): ny =..

Algorithm/백준 2022.04.15

[python] 백준 1012번 "유기농배추"(DFS/BFS)

문제 풀이 (BFS) 입력을 받은 후 그래프가 입력되는 횟수만큼 탐색 수행 그래프의 값이 1인경우(배추가 있는 경우) bfs 탐색 진행 탐색을 진행할 때 마다 같은 좌표의 탐색이 반복되지 않도록 그래프의 값을 0으로 초기화 bfs 연산이 한 번 끝날 때 마다 연결되어 있는 곳의 탐색을 마친 것 이므로 카운트 카운트 한 횟수 출력 코드 from collections import deque num = int(input()) for i in range(num): rr, cc, num = map(int,input().split()) graph = [[0] * rr for _ in range(cc)] for i in range(num): x, y = map(int,input().split()) graph[y][x..

Algorithm/백준 2022.04.14

[python]백준 2667번 "단지찾기"(DFS/BFS)

문제 풀이 (BFS) bfs를 사용하여 각 아파트들을 탐색 탐색이 진행 될 때 마다 아파트의 수를 세는 cnt 를 1씩 증가 탐색이 진행 될 때 그래프의 값을 1에서 0으로 변경 해 주어야함 (무한 루프에 빠짐 !!) 모든 연산이 끝난 후 아파트의 수를 저장할 배열을 만들어 cnt값 하나씩 넣기 아파트 배열의 값을 오름차순으로 정렬 아파트 배열의 길이를 먼저 출력한 후 배열의 각 인덱스 차례대로 출력 코드 from collections import deque n = int(input()) graph = [list(map(int,input()))for _ in range(n)] # 동서남북 dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] # 탐색 한 후 탐색을 완료한 것을 표시하기 위해..

Algorithm/백준 2022.04.14

백준 2729번 이진수덧셈

문제 해결방법 복잡하게 생각했는데 간단하게 이진수를 십진수로 바꿔 덧셈한 후 더한 값을 다시 이진수로 바꿔주면 되는 간단한 문제였다. num = int(input()) for i in range(num): sum = 0 data = list(map(str,input().split())) first_num = data[0] second_num = data[1] first_num = int(first_num,2) second_num = int(second_num, 2) sum += first_num + second_num sum = bin(sum) sum = sum.replace('0b','') print(sum) 이진수이므로 앞에 0b01111이런식으로 결과가 나오는 경우들에서 0b를 없앤 후 출력 해 주..

Algorithm/백준 2022.04.13

[python] 백준 2606번 "바이러스"(DFS/BFS)

문제 첫 번째 해결방법 - BFS 사용하기 먼저 1번 컴퓨터와 연결되어 있는지 여부를 좀 더 쉽게 파악하기 위해 그래프에 연결된 간선의 값들만 적지 않고 연결되지 않았을 때는 0, 연결되어 있는 경우 1을 입력한 후, 일반적인 bfs의 방법을 사용하여 해결 from collections import deque n = int(input()) m = int(input()) graph = [[0] * (n + 1) for _ in range(n + 1)] visited = [0] * (n + 1) for i in range(m): x,y = map(int,input().split()) graph[x][y] = 1 graph[y][x] = 1 def bfs(start_node, graph, visited): q..

Algorithm/백준 2022.04.13

[python]백준 1260번 "DFS와BFS" (DFS/BFS)

문제 문제 풀이 그래프 오름차순으로 정렬 visited 배열 copy해서 사용 기본적인 DFS & BFS 구현 후 출력 from collections import deque n,m,v = map(int,input().split()) visited = [False] * (n + 1) # 0부터 배열이 시작되므로 하나 더 만들어서 # 1부터 원소들을 넣으면 더 직관적으로 볼 수 있다. graph = [[] for _ in range(n + 1)] # 입력 조건에 맞게 원소들을 넣어주기 for i in range(m): x,y = map(int,input().split()) graph[x].append(y) graph[y].append(x) # 인접한 노드가 여러 개라면 낮은 숫자부터 탐색하므로 # 정렬해준 ..

Algorithm/백준 2022.04.13

치킨거리 구하기

문제 해결방법 조합을 구해서 모든 경우를 살펴보아야 하는 문제이다. 각 치킨집과 집의 위치를 하나씩 꺼내서 리스트에 저장한 후 m개의 조합을 구해 하나씩 거리를 비교하여 최솟값을 구한 후 반환한다. import itertools, sys n = 5 m = 3 city_map = [ [0, 0, 1, 0, 0], [0, 0, 2, 0, 1], [0, 1, 2, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 2], ] def get_min_city_chicken_distance(n, m, city_map): home_location_list = [] chicken_location_list = [] # 치킨집과 집이 있는 모든 위치를 꺼내서 저장 for i in range(n): for j..

로봇청소기

문제 해결방법 BFS를 사용하여 청소할 수 있는 공간을 큐에 넣고 하나씩 탐색하면서 청소하는 칸의 개수를 세고, 종료조건 (청소가 모두 되어있거나, 뒤쪽방향이 벽이라서 후진도 할 수 없는 경우) 탐색한 청소하는 칸의 개수를 반환한다. current_r, current_c, current_d = 7, 4, 0 current_room_map = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 1, 1, 1, 0, 1], [1, 0, 0, 1, 1, 0, 0, 0, 0, 1], [1, 0, 1, 1, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0,..