목록공부/알고리즘 문제 (10)
dev_eun
루트 노드부터 순회 while (stack.length != 0) { let [current, parent] = stack.pop(); visited[current] = true; for (let child of nodeList[current]) { if (!visited[child]){ // 수행할 일 stack.push([child, current]); } } } 리프 노드부터 순회 while (stack.length != 0) { let [current, parent] = stack.pop(); if (visited[current]) { // 수행할 task continue; } stack.push([current, parent]); visited[current] = true; for (let ch..
코딩테스트 연습 - 모두 0으로 만들기 각 점에 가중치가 부여된 트리가 주어집니다. 당신은 다음 연산을 통하여, 이 트리의 모든 점들의 가중치를 0으로 만들고자 합니다. 임의의 연결된 두 점을 골라서 한쪽은 1 증가시키고, 다른 한 programmers.co.kr 트리이기 때문에 어떠한 노드를 골라도 루트노드가 될 수 있다. 리프 노드부터 시작해서 bottom-up으로 루트까지 올라가면 되겠다고 생각했었다. 그러려면 부모 노드가 누구인지 알아야 하는데, 그렇게 할 필요가 없었다. 자식 노드의 순서가 중요하지 않기 때문에 자식 노드의 수만 세고 있으면 되었던 것. 그래서 리프 노드부터 시작해서 자신과 각 부모 노드의 weight를 수정하는 방식으로 진행했다. 루트(0번 노드)에서 시작하는 dfs, bfs로..
코테는 언더라인을 정하기 위한 수단이다. 완벽하게 정리된 코드가 아니어도 된다. 전역 변수를 잘 활용하자(visited, 연결 노드 벡터 등등) pop 함수 사용할 땐 항상 empty인지 확인하자. 트리 자식 순서가 중요하지 않을 땐 자식 노드의 개수를 활용하자.
프로그래머스 괄호 회전하기 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 정상적인 괄호 묶음인지 확인하는 것은 stack 문제로 유명한 것이니 그렇게 해결하면 됐는데, string을 어떻게 하나씩 shift할 수 있을까 하다가 rotation queue가 생각나서 queue로 해결하였다. 다른 사람들의 코드를 보니 string에서 맨 앞을 지우고 맨 뒤로 추가하는 방식으로도 많이 한 것 같다. 테스트에서 13번을 처음에 틀렸었는데 여는 괄호만 있는 케이스(ex. "{{{")를 해결하지 않아서 였다. c++ 코드 eun-seong/Documents 정리. Contribute to eun-seong/Documents development by creating an account on Gi..
programmers.co.kr/learn/courses/30/lessons/42586?language=cpp 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr c++ #include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer; int sz = progresses.size(); int release = ceil((double)(100-progresses[0])/..
programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr from collections import defaultdict def solution(n, results): answer = 0 win = defaultdict(set) lose = defaultdict(set) for res in results: win[res[0]].add(res[1]) lose[res[1]].add(res[0]) for i in range(1, n+1): for j in lose[i]: win[j].update(win[i]) for k in win[i]: lo..
www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n*n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에서 www.acmicpc.net from sys import setrecursionlimit setrecursionlimit(10**9) dx = [0, 0, -1, 1] dy = [-1, 1, 0, 0] dp = [[0]*501 for _ in range(501)] N = int(input()) bamboo = [] result = 0 def dfs(i, j): if dp[i][j]: return dp[i][j] dp[i][j] =..
programmers.co.kr/learn/courses/30/lessons/49189?language=python3 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr from collections import defaultdict, deque def bfs(depth, node, graph, visited, distance): visited[node] = True queue = deque([node]) distance[node] = 1 while queue: v = queue.popleft() for i in graph[v]: if not visited[i]: visited[i]..