Algorithm/백준 34

[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

백준 2908번 상수

문제 첫번째 해결방법 제일 마지막에 들어온 숫자(1의 자리 숫자)가 제일 먼저 들어온 숫자(100의 자리 숫자)와 값이 바뀐 후 바뀐 숫자로 크기 비교를 해야하므로, 스택을 이용하여 숫자를 하나씩 빼서 배열에 저장한 후 정수형으로 변환하여 숫자의 크기를 비교하였다. a,b = input().split() a = list(a) b = list(b) result_a = [] result_b = [] while a and b: res_a = a.pop() res_b = b.pop() result_a.append(res_a) result_b.append(res_b) num_a = (int(result_a[0]) * 100) + (int(result_a[1])* 10) + int(result_a[2]) num_b..

Algorithm/백준 2022.03.31

백준 1157번 단어공부

문제 1. 첫 번째 해결방법 데이터를 리스트에 입력받은 후 알파벳과 하나씩 비교해가면서 개수를 인덱스에 넣어준다. 그 후 가장 많이 나온 알파벳의 개수와 가장 많이 나온 알파벳의 인덱스를 구해서 가장 많이 나온 알파벳의 개수를 카운트 해서 2개 이상 이라면(많이 나온 알파벳의 개수가 1개가 아니라 2개 이상 일 경우) ?를 출력하고, 1개라면 대문자로 문자를 출력해준다. data = input() data = list(data.lower()) result = [0]*26 alphabet = 'abcdefghijklmnopqrstuvwxyz' for i in alphabet: for j in data: if j == i: idx = ord(i) - ord('a') result[int(idx)] +=1 #많..

Algorithm/백준 2022.03.18

백준 2675번 문자열반복

문제 1. 첫 번째 방법 먼저 입력받을 횟수를 받은 후 split을 사용하여 입력 값을 공백을 기준으로 나눠 받는다.' 이렇게 입력을 받으면 a에는 3과 5, b에는 ABC와 /HTP가 담긴다. 그 후 b를 a번 출력해야 하므로 이중 for문을 만들어 b를 a번만큼 돌리면서 형식에 맞게 출력해준다. num = int(input()) for i in range(num): a,b = input().split() cnt = int(a) for i in range(len(b)): for j in range(cnt): # 결과가 한 줄에 나오도록 출력 print(b[i],end='') # 결과가 나온 후 줄바꿈 print('') 주의할 점 : a값을 int로 변환해주지 않으면 str로 인식하여 에러가난다. 2. ..

Algorithm/백준 2022.03.17

백준 10809번 알파벳찾기

문제 1. 첫 번째 해결방법 결과를 출력할 알파벳 크기의 배열을 만든 후 디폴트 값으로 -1을 넣어준 후 입력받은 알파벳의 인덱스에 처음 위치를 넣어서 형식에 맞게 출력하는 방법 # 입력받기 data = input() alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] result = [0] * 26 # 결과 값을 나타 낼 배열을 만들고 디폴트 값으로 -1을 넣어주기 for i in range(len(alphabet)): result[i] = -1 # result 배열에 각 데이터가 처음 나온 위치 차례로 넣어주기 for char in alphabe..

Algorithm/백준 2022.03.17