Algorithm 179

[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

위장

문제 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 해결방법 옷을 조합할 수 있는 경우의 수는 각 옷의 종류(상의,하의,모자 등)의 가짓수를 곱해주면 되는데 이렇게 계산하게 되면 하나씩 안 입은 경우는 포함되지 않게 된다. 따라서 종류의 가짓수에 1을 더한 수를 곱해주고, 아무것도 안 입은 경우는 없다고 했으므로 이 경우를 결과에서 제외하기 위해 -1을 해준다. 그 후 값을 출력하면 조합할 수 있는 모든 경우의 수를 출력할 수 있다. clothes = [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "hea..

전화번호 목록

문제 https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 첫 번째 해결방법 문제를 0번째 인덱스가 접두어 인 경우 False를 반환하는 것으로 잘 못 이해하고 푼 코드 먼저 key값을 0번째 인덱스로 정하고, 지워준다. 그 후 기본 결과를 True로 넣어준 후, 접두사와 숫자 단위가 같아지도록 숫자를 변환한 후 answer에 넣어주었다. 그 후 answer값과 0번째 인덱스의 값이 같다면 False를 넣고 다..

완주하지 못한 선수

문제 https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 첫 번째 해결방법 이름을 해쉬 값으로 잡아 True를 넣어준 후, 완주 한 멤버들의 이름을 해쉬에서 지운 후, 남아있는 키 값만 반환한다. -> 동명이인이 있을 경우 둘의 이름을 다 삭제해버려서 원하는 결과를 얻지 못했다. def solution(participant,completion): dict = {} for key in parti..