본문 바로가기

전체 글

(131)
[백준 / Python] 미로 만들기_2665 내 풀이 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 from heapq import heappush, heappop n = int(input()) data = [] for _ in range(n): data.append(list(map(int, input()))) dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] def dijkstra(): q = [] heappush(q, (0, 0, 0)) visited = [[False for _ in range(n)] for _ in range(n)] while q: cnt, x, y = heappop(q) if x == n - ..
[백준 / Python] 녹색 옷 입은 애가 젤다지?_4485 풀이 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 from heapq import heappush, heappop dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] round = 0 while True: n = int(input()) round += 1 if n == 0: break data = [] for _ in range(n): data.append(list(map(int, input().split()))) visited = [[False for _ in range(n)] for _ in range(n)] visited[0][0] = True q = [] heappu..
[백준 / Python] 파티_1238 첫 번째 풀이 코드12345678910111213141516171819202122232425262728293031323334353637383940import sysfrom heapq import heappush, heappop n, m, x = map(int, input().split())data = [[] for _ in range(n + 1)]INF = int(1e9)for _ in range(m): a, b, c = map(int, sys.stdin.readline().split()) data[a].append((b, c)) def dijkstra(start, end): distance = [INF for _ in range(n+1)] distance[start] = 0 q = [] heappush..
알고리즘 공부 방향성🙏 보호되어 있는 글입니다.
[백준 / Python] 1261_알고스팟 풀이 처음 문제를 보았을 때, 그냥 BFS로 풀면 되겠다 싶었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 from _collections import deque m, n = map(int, input().split()) data = [] for _ in range(n): data.append(list(map(int, input()))) dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] def bfs(): q = deque() q.append((0, 0)) distance = [[int(1e9) for _ in range(m)] for _ in range(n)] distan..
[BOJ] 단지번호붙이기_2667 이 문제는 오래전에 bfs로 풀어봐서 그런지, 고민할 것도 없이 풀렸다. 하지만 이 문제를 dfs를 사용하여 풀려고 하니 어떻게 풀어야 할지를 모르겠다!. 문제가 쉬워서 그런지 마냥 재귀를 사용하여 풀 순 있겠다만,, base case도 이상하고, recursive case도 이상하다. 결국 다른 블로그를 보았고, 어떻게 푸는지는 알겠으나 완벽히 이해가 되진 않는다. dfs로 문제를 풀거나 대충 이해하기는 어렵지 않으나, 제대로 이해하고 활용하는 것은 정말 어려운 것 같다. 특히나 백트래킹 같은 경우, 직접 그려보지 않으면 이해하기 너무 어렵다... 내가 bfs로 풀었던 정답 코드 dfs코드 뭔가 알겠으면서 모르겠다. 궁금증 1. base case를 x,y 가 범위를 벗어나는 경우로 걸었는데, 이거보다 ..
[BOJ] 연산자 끼워넣기_14888 분명 예전에 풀었던건데,,, 왜 틀릴까!?!!?!? 악! 처음 풀었던 접근 방법에서 크게 벗어나진 않았지만,,, 아직 왜 틀렸는지 모르겠다. 알아보자!. 완전 처음에는 Recursive case에 for문을 넣었다. for i in range(4)를 해주고 dx[i]형태로 적어내려갔다. 근데 사실 이거 왜 틀렸는지 대충만 알겠다,,, 왜 틀렸을까? 뭐 대충 이런 코드였다,,, 5분만에 짠 후, 아이고~~ 잘짰네 백트래킹 이해 좀 했나~?싶었다. 왜 틀렸을까?? 생각해보자. 어,,, for문을 쓰면 왜 안되지?!?!? -- 직접 손으로 해보았다,, -- for 문이 잘못된 것이 아니였다. 잘 보면 i == 3: 부분에서 int(param_data / data[cnt])를 안해주었다. 그리고 result_m..
[BOJ] 좋은수열_2661 이 문제는 내 힘으로 풀지 못하였다. 요 몇일 백트래킹 문제를 풀고 있는데, 내가 이 개념을 아는 줄 알았는데 잘 모르는 것 같다. 이 상태로 문제를 더 푸는건 의미가 없는 것 같다. 여기서 바로 잡고 가자. 재귀와 basecase를 어떻게 활용하는지 공부해보자. 재귀와 base case를 공부하여 밑에 정리하고 왔다. 조금은 보이지 않던 것들이 보이는 것 같다. 그래도 다시 흠칫하는 것은, data[-i:] == data[-i*2:-i]부분이다. 나라면 길이가 if cnt == n이 된다면 이때 판별할 것 같았다. 하지만 이렇게 되면 길이가 n이 될떄까지의 모든 경우의 수를 다 구해놓고, 나쁜 수열이 된다면 버려야 한다. 즉, 소모가 매우 크다. data[-i:] == data[-i*2:-i] -> 이..