Algorithm 179

[Python] 백준 1707번 '이분 그래프' (DFS/BFS)

문제 문제풀이 이분그래프는 같은 집합으로 들어갈 수 없어야 하므로 방문한 곳들에 특정 값 넣기 방문 가능하고, 이미 방문한 곳과 같은 집합에 속하지 않으면 이전 노드와 다른 값을 넣기 ( -1을 곱해주었다) 이전 방문한 곳과 같은 집합에 속하면 이분그래프가 아니므로 bipartite는 False bipartite가 True면 'YES'를 출력하고 False면 'NO'를 출력한다 코드 import sys from collections import deque n = int(sys.stdin.readline()) for _ in range(n): v,e = map(int,sys.stdin.readline().split()) # 빈 그래프 graph = [[] for _ in range(v + 1)] # 방문한..

Algorithm/백준 2022.04.23

[Python] 백준 7562번 나이트의 이동(DFS/BFS)

문제 풀이 1 큐에 현재 좌표와 이동횟수 0을 삽입 탐색이 진행될 때 마다 이동횟수를 1씩 더해서 큐에 삽입 목표 좌표에 도달 했다면, 이동횟수를 출력하고 while문 빠져나오기 코드 from collections import deque dy = [-1, -2, -2, -1, 1, 2, 2, 1] dx = [-2, -1, 1, 2, 2, 1, -1, -2] n = int(input()) graph = [] for _ in range(n): l = int(input()) visited = [[0] * l for _ in range(l)] y, x = map(int,input().split()) target_y, target_x = map(int,input().split()) queue = deque() q..

Algorithm/백준 2022.04.23

프로그래머스 H-Index

문제 코딩테스트 연습 - H-Index | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 해결방법 논문의 갯수(배열의 길이 + 1)만큼 i를 늘려주면서 논문의 인용수가 i값 이상일 경우 i이상 인용된 논문의 갯수를 구하는 변수를 만들어 1씩 증가시켜준다. 그 후 인용한 논문의 수가 i값 이상인 경우 i값을 새로운 변수에 담아 리턴하면 H-Index를 구할 수 있다. def solution(citations): n = len(ci..

[python] 프로그래머스 "가장 큰 수"

문제 코딩테스트 연습 - 가장 큰 수 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 문제풀이 정수와 달리 문자의 정렬은 맨 앞의 숫자가 큰 수인 경우부터 비교 이러한 특성을 이용하여 배열을 문자로 만들어준 후, 역정렬한다. 이 때 30과 3이 들어오는 경우 303030, 333으로 비교하여 30보다 3이 크게 정렬되어야 하므로 세번씩 이어붙여 비교해준다 (numbers의 원소들은 1000의자리..

프로그래머스 k번째 수

문제 코딩테스트 연습 - K번째수 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 해결방안 commands에 저장되어있는 각 값들을 뽑아 문자열을 나눠준 후, commands의 마지막 원소번째 숫자를 정답배열에 하나씩 붙여 리턴해주는 간단한 문제 def solution(array, commands): answer = [] for i in commands: start = i[0] last = i[1] num = i[2] answer.append(sorted(array[start - 1:last])[num-1]) return a..

[Python] 백준 2206번 "벽 부수고 이동하기" (DFS/BFS)

문제 문제 풀이 벽을 뚫은 경우와 뚫지 않은 경우를 구별하기 위해 방문여부 3차원 배열로 확인 0인 경우 벽을 아직 뚫지 않은 상태, 1인 경우 벽을 이미 뚫은 상태 벽이 없는 경우 이동 횟수를 카운트 해서 방문배열에 넣고, 벽이 있으나 부술 수 있는 경우, 벽의 값을 1로 업데이트 한 후, 이동횟수 업데이트 그 후, 큐에 이동 할 위치와 벽의 값 큐에 삽입 목표 좌표에 도달 한 경우 이동횟수 리턴 탐색을 진행 했으나, 목표 지점에 도달 불가능 한 경우 -1 리턴 코드 from collections import deque n, m = map(int,input().split()) graph = [] # 벽을 부순 상태와 부수지 않은 상태 구별하기 위해 3차원배열 visited = [[[0] * 2 for ..

Algorithm/백준 2022.04.21

[Python] 백준 1697번 숨바꼭질 (DFS/BFS)

문제 풀이 1 큐에 수빈이의 좌표와 이동하는 데 걸린 시간을 삽입하여 bfs 탐색 코드 from collections import deque subin, destination = map(int, input().split()) max_num = 100000 visited = [0] * (max_num + 1) def bfs(): queue = deque() queue.append((subin, 0)) visited[subin] = 1 while queue: x, count = queue.popleft() if x == destination: visited[x] = 1 return count else: for i in (x + 1, x - 1, x * 2): if 0

Algorithm/백준 2022.04.20

백준 7569번 토마토

문제 해결방법 입력받은 배열을 탐색하여 토마토가 있는 곳부터 탐색을 시작한후, bfs를 사용하여 큐에 새로운좌표와, 익히는 일수를 하나씩 더해주면서 탐색한다. 마친 후에는 익지 않은 토마토가 있는지 배열을 다시 한번 탐색하여 있다면 -1 그렇지 않다면 익히는데 걸린 총 일수를 출력한다. from collections import deque import sys n,m,h = map(int,sys.stdin.readline().split()) graph = [[list(map(int,sys.stdin.readline().split())) for _ in range(m)] for _ in range(h)] queue = deque() # 동서남북전후 dy = [0, 0, -1, 1, 0, 0] dx = [1,..

Algorithm/백준 2022.04.18

백준 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