본문 바로가기

알고리즘/백준 (Pyhthon)

(79)
[알고리즘] 백준 2887 행성 터널 / 파이썬 / 크루스칼 www.acmicpc.net/problem/2887 2887번: 행성 터널 첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진다. 좌표는 -109보다 크거나 같고, 109보다 작거나 같은 정수이다. 한 위치에 행성이 두 개 이�� www.acmicpc.net def find(x): if parent[x] == x: return x parent[x] = find(parent[x]) return parent[x] def union(v1, v2): v1 = find(v1) v2 = find(v2) if v1 != v2: parent[v2] = v1 def parentCk(v1, v2): v1 = find(v1) v2 = find(v2)..
[알고리즘] 백준 2239 스도쿠 / 파이썬 / dfs www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다� www.acmicpc.net def cal(x, y): return (x//3)*3 + (y//3) def sol(n): if n == 81: for i in B: print(''.join(map(str, i))) return True x = n // 9 y = n % 9 if B[x][y]: return sol(n+1) else: for i in range(1, 10): if not c1[x][i] and not c2[y][i] ..
[알고리즘] 백준 14502 연구소 / 파이썬 www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크� www.acmicpc.net from collections import deque from copy import deepcopy dx, dy = [0, -1, 0, 1], [-1, 0, 1, 0] #bfs이용해 바이러스 퍼뜨림 def virus(i, j, Map2): q = deque() q.append([i, j]) while q: x, y = q.popleft() for k in range(4): xx, yy = x + dx[k], y + dy[..
[알고리즘] 백준 1600 말이 되고픈 원숭이 / 파이썬 www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있�� www.acmicpc.net 2206번 문제와 아주 유사하다 응용해서 풀어주면 된다 방문을 체크하는 ck배열을 삼중배열로 만들어서 말처럼 이동한 경우/ 원숭이로 이동한 경우를 구별한다 x, y좌표로 말처럼 k번 이동했으면 ck[x][y][k]에 이동거리가 저장된다 x, y좌표로 원숭이로 이동했으면 k는 변하지 않는다 그리고 (H, W)까지 갔다면 저장했던 거리를 리턴, 아니라면 -1을 리턴해 출력해준다 from coll..
[알고리즘] 백준 5052 전화번호 목록 / 파이썬 www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 �� www.acmicpc.net 왜 딕셔너리를 생각한거지,,? 딕셔너리 한번 써보고 싶었나보다 def sol(): dic = {} N = int(input()) for _ in range(N): num = input() dic[len(num)] = dic.get(len(num), []) + [num] for k1, v1 in dic.items(): for k2, v2 in dic.items(): if k1 >= k..
[알고리즘] 백준 15988 1, 2, 3 더하기 2 / 파이썬 www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net #처음에 % 1000000009를 print에서 해줬는데 메모리초과 테스트케이스가 커지면 초과되는듯..? lst = [0] * 1000001 lst[1], lst[2], lst[3] = 1, 2, 4 for i in range(4, 1000001): lst[i] = (lst[i-1] + lst[i-2] + lst[i-3]) % 1000000009 for _ in range(int(input())): num = int(input()) print(lst[num])
[알고리즘] 백준 3495 아스키 도형 / 파이썬 www.acmicpc.net/problem/3495 3495번: 아스키 도형 창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다. 각 문자는 그림에서 1*1크기의 단위 정사각형을 나타낸다. '.'은 빈 칸을 나타내며, '/'는 정사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓 www.acmicpc.net H, W = map(int, input().split()) M = [list(input()) for _ in range(H)] result = 0 for i in range(H): line = 0 for j in M[i]: if j == '/' or j == '\\': line += 1 #line이 홀수개일때 .이 도형안에, 짝수개일때 도형밖에(도형이 닫힌거니까) 있다고 생각 if line ..
[알고리즘] 백준 2206 벽 부수고 이동하기 / 파이썬 www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로�� www.acmicpc.net 방문을 체크하는 ck배열을 삼중배열로 만들어서 벽을 안부술경우 / 부술경우를 구별한다 벽을 안부쉈다면 ck[x][y][0]에 거리를 저장하고, 부쉈다면 ck[x][y][1]에 거리를 저장한다 그리고 n, m까지 갔다면 저장했던 거리를 리턴, 아니라면 -1을 리턴해 출력해준다 from collections import deque dx, dy = [0, -1, 0, 1], [-1, 0,..