목록Algorithm/BOJ (35)
눈송이의 개발생활
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c65H2T/btrs7qXuG7B/Ad6bBWGmAibAvEjr8RLKL1/img.png)
문제 https://www.acmicpc.net/problem/2178 코드 from collections import deque import sys input = lambda : sys.stdin.readline().strip() def bfs(x, y): queue = deque([(x, y)]) visited[x][y] = 1 while queue: cx, cy = queue.popleft() for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]: nx, ny = cx + dx, cy + dy if 0 > nx or nx > N-1 or ny M-1: continue if visited[nx][ny] == 0 and graph[nx][ny] =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bhg891/btrs3aBG7nX/wBe2RXMK3tHel4klqB21H0/img.png)
문제 https://www.acmicpc.net/problem/4963 코드 from collections import deque import sys input = lambda : sys.stdin.readline().strip() def bfs(x, y): queue = deque([(x, y)]) visited[x][y] = 1 while queue: cx, cy = queue.popleft() for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0), (-1, 1), (1, -1), (1, 1), (-1, -1)]: nx, ny = cx + dx, cy + dy if nx h-1 or ny w-1 : continue if vis..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d5Cv0V/btrsWLWJBgy/osweSigOnKJ8renozKsbsk/img.png)
문제 https://www.acmicpc.net/problem/1260 코드 from collections import deque import sys input = lambda : sys.stdin.readline().strip() def dfs(v): print(v, end=' ') visited[v] = 1 for i in range(1, N+1): if visited[i] == 0 and graph[v][i] == 1: dfs(i) def bfs(v): visited = [0] * (N + 1) # BFS 위해서 초기화하기 queue = deque([v]) visited[v] = 1 while queue: k = queue.popleft() print(k, end=' ') for i in range..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QkuLu/btrsMaN8N1y/PX4EsU07o7ogdvujEOjZ2k/img.png)
문제 https://www.acmicpc.net/problem/11724 코드 import sys input = lambda : sys.stdin.readline().strip() sys.setrecursionlimit(10000) def dfs(v): visited[v] = 1 for i in range(1, N+1): # 연결되어 있고 visited 아니면 다시 탐색 if s[v][i] == 1 and visited[i] == 0: dfs(i) N, M = map(int, input().split()) s = [[0] * (N+1) for i in range(N+1)] visited = [0 for i in range(N+1)] count = 0 for i in range(M): a, b = map(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cdDHZe/btrq6PYUXEQ/KkevdI02TZ7DWOC1a0k6z1/img.png)
문제 https://www.acmicpc.net/problem/11052 코드 import sys input = lambda : sys.stdin.readline().strip() n = int(input()) p = [0] + list(map(int, input().split())) dp = [0 for _ in range(n+1)] for i in range(1, n+1): for k in range(1, i+1): # dp를 max값으로 계속 갱신 dp[i] = max(p[k] + dp[i-k], dp[i]) print(dp[n]) 풀이 사실 처음에는 접근이 어려워서 힌트를 보고 풀었다🤔 점화식을 찾고 그 점화식에 맞는 코드를 짜서 풀 수 있었다. 문제에 있는 예시로 설명하자면, P1 = 1, P2..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/7LrS9/btrqM5b0yJp/KHc4akfK6Y6tfdEDBLbmC1/img.png)
문제 https://www.acmicpc.net/problem/15988 코드 import sys input = lambda : sys.stdin.readline().strip() n = int(input()) dp = [0] * 1000001 dp[1], dp[2], dp[3] = 1, 2, 4 for i in range(4, 1000001): dp[i] = dp[i - 1] % 1000000009 + dp[i - 2] % 1000000009 + dp[i - 3] % 1000000009 for _ in range(n): num = int(input()) print(dp[num] % 1000000009) 풀이 1번째는 메모리 초과, 2번째 시도는 시간초과로 틀린 문제이다 메모리 초과는 왜 나는지 계속 찾..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bofs2v/btrqJ6B9xOj/OfiKPkLH5Z54n6NxOl4PV1/img.png)
문제 https://www.acmicpc.net/problem/1406 코드 #1 - WRONG ❌ from collections import deque import sys input = lambda : sys.stdin.readline().strip() str = deque(input()) n = int(input()) cursor = len(str) for _ in range(n): op = input().split() if op[0] == 'L' and cursor != 0: cursor -= 1 elif op[0] == 'D' and cursor != len(str): cursor += 1 elif op[0] == 'B' and cursor != 0: del str[cursor - 1] curso..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uheCA/btrqHEDwXkS/c4NEr9jkUOVdapeTyxC59K/img.png)
문제 https://www.acmicpc.net/problem/1748 코드 import sys input = lambda : sys.stdin.readline().strip() n = input() answer = 0 length = len(n) - 1 for i in range(length): # i는 0부터 시작 ~ 자릿수보다 하나 작은거까지 answer += (i+1) * 9 * (10 ** i) answer += (length + 1) * ((int(n) - (10 ** length)) + 1) print(answer) 풀이 그리디 유형 문제 중 처음으로 아무런 힌트 없이 쉽게 풀 수 있는 문제였다 예시를 보면 쉽게 패턴을 찾을 수 있다 15 → 123456789 + 101112131415 15..