본문 바로가기

전체 글47

[16918] 봄버맨 첫번째 폭발에서 모든 범위가 터지게 되면첫 폭탄배치가 복원되지 않는다. ex)OO. … OOOOOO → … → OOOOOO … OOO처음 배치가 복원되지 않는다. 먼저 첫번째 폭발을 계산해서 남아있는 폭탄을 계산하고, → A첫번째 폭탄에서 남아있는 폭탄의 폭발을 계산해서 남아있는 폭탄을 계산하면 → B 그 다음에는 4마다 일정한 패턴으로 반복된다. 첫배치 → 첫배치 → (모든배치 → A배치 → 모든배치 → B배치) * N …'''16918 봄버맨'''import sysdef print_graph(R, graph): for j in range(R): print(''.join(graph[j]))R, C, N = map(int, sys.stdin.re.. 2025. 9. 11.
[1992] 쿼드트리 근본적으로 쿼드트리가 좌상, 우상, 좌하, 우하로 분할해서 나타내는거라 분할정복 학습하기 좋은 문제인것같다계속 N//2로 내려가면서 체크해야하기 때문에 재귀로 처리하는게 좋다. N=1이라 한가지 노드만 봐도 되면 그 노드값을 뱉고그래프의 해당 범위에 한가지 요소만 있으면 그 한가지 요소를 뱉고 아닌 경우 좌상, 우상, 좌하, 우하 모두 재귀로 호출한다.'''1992 쿼드트리'''import sysdef makeQuadTree(y, x, N, graph): stack = [] if N==1: stack.append(graph[y][x]) return stack temp_set = set() for j in range(y, y+N): # print(.. 2025. 9. 11.
동시성, 병렬성, 동기, 비동기 동시성(Concurrency) vs 병렬성(Parallelism)동시성-Concurrency 은 여러개의 작업을 마치 동시에 작업하는 것처럼 작동하는것을 의미한다. node.js의 i/o 를 제외한 developer가 작성한 logic들은 single-thread로 작동한다. 하지만 async 을 사용하면 마치 "동시에" 실행되는 것처럼 작동한다. 하나의 쓰레드가 여러개의 작업을 번갈아 작업해 동시에 작동하는 것처럼 보이게 하는 것이다. 병렬성-Parallelism 은 실제 multi-thread로 여러개의 작업을 다른 thread에서 병렬로 처리하는것을 의미한다. 동시성은 software적 기법이라 볼 수 있고 병렬성은 hardware적 기법이라 볼 수 있다.동기(Synchronous) vs 비동기.. 2025. 9. 10.
[1987] 알파벳 bfs/dfs 문제이다. (Backtracking)맨처음 bfs로 접근하니까 메모리초과가 나고bfs로 접근한다고 가지치기가 가능한가 생각해보니 그렇지도 않은것같아서dfs로 바꾸어 접근했다. bfs는 최소 경로의 종료조건에서 탐색을 멈출수 있으면 좋은데,그렇지 않은 경우에는 메모리문제때문에 bfs를 쓰는게 맞다. python3 인터프리터의 경우에는 시간초과가 나서 pypy3 인터프리터로 제출해서 맞췄는데,이게 정답범위의 시간복잡도라서 정답인건지 아니면 단순히 pypy3이 효율적이라 정답인건지 찝찝한 느낌이 들었다..'''1987 - 알파벳'''import sysfrom collections import dequedef dfs(R, C, graph): queue = deque() visited =.. 2025. 9. 10.
[1707] 이분 그래프 이분 그래프는 두가지 색으로 그래프를 칠했을때인접한 노드끼리는 다른 색상으로 칠해지는 그래프다. 그래서 실제로 빨강과 검정으로 칠해보고같은 색상으로 칠할수밖에 없는 경우가 생기면 NO를 return한다. 혹시 간선없이 고립된 노드가 있을 경우를 체크했는데,for문을 1번부터 V번까지 돌기 때문에 고립된 노드도 칠해지기 때문에 불필요한 엣지케이스 체크였다.'''1707 - 이분 그래프'''import sysfrom collections import dequedef coloring(V, graph): node_color = [None for _ in range(V+1)] for v in range(1, V+1): if node_color[v] is None: sta.. 2025. 9. 10.
[16437] 양 구출 작전 각 섬에서 1번 섬으로 가는 경로는 유일하기 때문에 Tree라고 볼 수 있다.트리에서 자식이 없는 끝 노드에서 부모노드로 올라가면서 양을 옮겨준다. 끝 노드를 찾고 -> 내려온 경로를 따라서 양을 옮기는 작업을 수행했는데 시간 초과가 났다.리프 노드에서 내려오면서 한번 작업을 수행할 문제를, 내려오면서 끝노드를 찾고, 다시 올라가면서 부모 노드까지 작업을 수행하는 두번의 작업을 수행하게 되서 시간초과가 났다. 따라서 재귀로 문제를 해결했다.재귀는 효율보다는 개발자의 개발편리라고 생각했는데 생각이 바뀌게 됬다. 경로를 추적하는 방식 - 비효율적임'''16437 양 구출 작전'''import sysdef dfs(N): global graph global node visited = set() .. 2025. 9. 10.
[18126] 너구리 구구 경로가 최대가 되는 길을 찾아야 하므로,최소 경로가 되는 곳에서 break를 하지 못한다 -> 따라서 메모리에서 불리한 bfs가 탈락하고 dfs를 채택했다각각의 경로에 대해서 경로의 길이를 저장해서 최대값을 출력한다.'''18126 너구리 구구'''import sysdef dfs(N): global graph global max_v i = 0 s = 0 todo = list() todo.append(tuple([i, 0])) while todo: t = todo.pop() ti = t[0] ts = t[1] if max_v 2025. 9. 10.
Go vs Rust Go vs. RustLost Ark Simulator의 백엔드 서비스 언어로 Go와 Rust를 비교 분석한다. 시뮬레이터는 사용자가 캐릭터의 잠재적 성능을 분석할 수 있도록 복잡한 전투 시뮬레이션을 수행한다. 현재 백엔드 서비스는 Node.js를 기반으로 한 마이크로서비스 아키텍처(MSA)로 구성되어 있다. 따라서 각각의 서비스마다 다른 스택을 적용할 수 있는 장점이 있다. Node.js는 비동기 I/O 처리에 강점을 보여 API 게이트웨이나 간단한 데이터 서비스에는 훌륭한 선택이지만, 시뮬레이터와 같이 CPU 사용량이 많은(CPU-bound) 작업에는 한계가 있을 수 있다. Node.js의 싱글 스레드 기반 이벤트 루프는 수많은 시뮬레이션을 반복 실행하여 통계적 정확성을 확보해야 하는 핵심 로직에 병목.. 2025. 9. 3.
[14888] 연산자 끼워넣기 단순 backtracking재귀를 사용했다. 나눗셈의 계산방식이 python과 다르므로 꼭 확인이 필요한 문제다.또한 divide by 0 error 에 주의할 필요가 있을 것 같다.'''14888 연산자 끼워넣기'''import sysdef check_sign(number): if number > 0: return 1 elif number 0: bt(num+numbers[i], numbers, i+1, pl-1, mi, mu, di) if mi > 0: bt(num-numbers[i], numbers, i+1, pl, mi-1, mu, di) if mu > 0: bt(num*numbers[i], numbers, i+1, pl, .. 2025. 9. 2.