본문 바로가기

분류 전체보기

(116)
C++ | 백준 | 1325 | 효율적인 해킹 solution 단방향 그래프 #include "stdafx.h" #include #include #include using namespace std; int N, M; vector G[10001]; int visited[10001] = { 0, }; int cnt; void dfs(int node) { //방문 visited[node] = 1; cnt += 1; for (int i = 0; i > N >> M; while (M--) { int c1, c2; cin >> c1 >> c2; G[c2].push_back(c1); } i..
파이썬 | c++ | 백준 | 4963 | 섬의 개수 | del list # 4963, 섬의 개수 import sys sys.setrecursionlimit(10000) dx = [-1, -1, -1, 0, 0, 1, 1, 1] dy = [1, 0, -1, 1, -1, 1, 0, -1] def dfs(x, y): visited[x][y] = 1 for i in range(8): nx = x + dx[i] ny = y + dy[i] if 0 = w) continue; else { if (map[nx][ny] == 1 && visited[nx][ny] == 0) dfs(nx, ny); } } } int main() { //int w, h; while (true) { cin >> w >> h; if (w == 0 && h == 0) { break; } for (int i = 0; ..
파이썬 | 백준 | 1743 | 음식물 피하기 solution # 1743, 음식물 피하기 import sys sys.setrecursionlimit(10000) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dfs(x, y): visited[x][y] = 1 global cnt cnt += 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 1
파이썬 | 백준 | 2458 | 키 순서 solution 1. dfs 2번 이용 # 2458, 키 순서 import sys sys.setrecursionlimit(10000) def dfs1(x): visited[x] = 1 global tall for i in height_1[x]: if not visited[i]: tall += 1 dfs1(i) return tall def dfs2(x): visited[x] = 1 global short for i in height_2[x]: if not visited[i]: short += 1 dfs2(i) return short n, m = map(int, sys.stdin.readline().split()) height_1 = [[] for _ in range(n + 1)] height_2 = [[]..
파이썬 | 백준 | 6593 | 상범 빌딩 solution 1. bfs이용 (6방향 → 3차원 배열) # 6593, 상범빌딩 import sys from collections import deque dx = [-1, 1, 0, 0, 0, 0] dy = [0, 0, -1, 1, 0, 0] dz = [0, 0, 0, 0, -1, 1] def bfs(z, x, y): visited[z][x][y] = 1 q = deque() q.append((z, x, y)) while q: c, a, b = q.popleft() for i in range(6): nz = c + dz[i] nx = a + dx[i] ny = b + dy[i] if 0
파이썬 | 백준 | 1715 | 카드 정렬하기 solution 1. 카드 묶음 배열 정렬 # 1715, 카드 정렬하기 import sys n = int(sys.stdin.readline()) ns = [] for _ in range(n): ns.append(int(sys.stdin.readline())) ns.sort() temp = 0 for i in range(len(ns)-1): temp += ns[i] + ns[i+1] ns[i+1] = temp print(temp) 메모리 초과 2. 힙 이용 # 1715, 카드 정렬하기 import sys import heapq n = int(sys.stdin.readline()) ns = [] for _ in range(n): heapq.heappush(ns, int(sys.stdin.readline())..
파이썬 | 백준 | 1010 | 다리 놓기 solution 1. dp 이용 # 1010, 다리 놓기 import sys t = int(sys.stdin.readline()) dp = [[0]*30 for _ in range(30)] for i in range(30): for j in range(30): if i == 1: dp[i][j] = j else: if i == j: dp[i][j] = 1 elif i < j: dp[i][j] = dp[i-1][j-1] + dp[i][j-1] for i in range(t): n, m = map(int, sys.stdin.readline().split()) print(dp[n][m]) 29380KB 64ms dp에서 문제 고른 게 아니었으면 생각 못 했을 것 같다.. 2. 조합 이용 # 1010, 다리 놓..
파이썬 | 백준 | 7569 | 토마토 | bfs 3차원 시간초과 solution 1. 상자의 수 H → 3차원 배열 tomatoes[z][x][y] 2. 최소 일수 → BFS # 7569, 토마토 import sys from collections import deque dx = [-1, 1, 0, 0, 0, 0] dy = [0, 0, -1, 1, 0, 0] dz = [0, 0, 0, 0, -1, 1] def bfs(x,y,z): q = deque() q.append((x, y, z)) visited[z][x][y] = 1 cnt = 0 while q: a, b, c = q.popleft() for i in range(6): nx = a + dx[i] ny = b + dy[i] nz = c + dz[i] if 0