여니의 취준 준비/코딩테스트 (Python) 193

[11725] 트리의 부모찾기 in python

처음에 문제를 보고 헤맸던 부분은 부모 - 자식 순으로 입력이 주어지는 줄 알았다. 1번 노드가 루트 노드라는 게 문제에 딱 나와있는데, 그걸 놓쳐서 ㅠ.. 어차피 양방향 그래프로 받게 되면 상관이 없음 DFS를 이용하여 풀었다. 1번 노드부터 탐색을 시작해야한다고 문제에 나와있으므로 1번 노드부터 탐색 시작 그래프 입력받은 건 [[], [6, 4], [4], [6, 5], [1, 2, 7], [3], [1, 3], [4]] 1번 노드 : [6.4] 2번 노드 : [4] 3번 노드 : [6,5] 4번 노드 : [1,2,7] 5번 노드 : [3] 6번 노드 : [1,3] 7번 노드 : [4] 1번 노드를 보면 6번과 4번 노드와 연결되어 있다. 6번 노드와 4번 노드는 아직 방문을 하지 않은 노드이므로 1..

[1260] DFS 와 BFS in python

dfs와 bfs를 알아야 풀 수 있었던 문제! DFS : 깊이 우선 탐색 깊게 파고들때까지 파고들다가 막히면 돌아오는 방법 즉 가장 멀리있는(깊이 있는)노드부터 탐색하는 방법 BFS : 넓이 우선 탐색 큐를 이용하여 가장 가까운 노드부터 탐색하는 방법 from collections import deque n, m, v = map(int, input().split()) array = [[] for _ in range(n + 1)] for i in range(m): x, y = map(int, input().split()) array[x].append(y) array[y].append(x) for i in range(n+1): array[i]=sorted(array[i]) dfs_visited = [Fals..

[2606] 바이러스 in python

https://www.acmicpc.net/problem/2606 처음에는 그래프를 단방향으로 했다. 문제에 나와있는 예시도 통과했길래 이게 맞는 건 줄 알았는데 아니었다 ^^ 양방향으로 받아야한다. 단방향으로 받게되면 3에서 탐색이 끝나버린다. 배열 인덱스 3 위치에 있는 곳에는 아무런 노드가 없기 때문에 양항뱡으로 받으면 정상적으로 탐색이 가능해진다. 모든 노드가 연결되어 있는 경우를 생각하지 못했다. n = int(input()) connect = int(input()) array = [[] for _ in range(n + 1)] visited = [False for _ in range(n + 1)] for _ in range(connect): c1, c2 = map(int, input().spl..

[Git] Git 사용법 및 명령어 총정리

[지역 저장소 -> 원격 저장소(깃허브)] -> 지역 저장소에 새 프로젝트 생성 -> git init 명령어로 해당 프로젝트를 깃 지역 저장소로 지정 -> git add 명령어로 수정한 파일을 스테이징 영역으로 옮김 -> git commit 명령어로 지역 저장소에 저장하게 된다. -> git push 명령어로 변경 사항을 원격 저장소에 반영한다. [1] 지역 저장소에 커밋 등록하기 1. 작업 폴더로 이동하기 : cd cd 경로 2. 해당 프로젝트를 깃 지역 저장소로 지정 : git init git init Initialized empty Git repository in /Users/.../.git/ > .git 폴더가 생성되었고, 이제 이 프로젝트는 깃으로 소스 코드 버전 관리가 된다. 폴더 앞에 점이 ..

[10282] 해킹 in python

> 다익스트라 해킹된 컴퓨터는 3번 2 -> 1, 2초 3 -> 1, 8초 3 -> 2, 4초 2번 컴퓨터가 1번 컴퓨터에 의존하고 있고, 3번 컴퓨터가 1번 컴퓨터에 의존하고 있으며 3번 컴퓨터가 2번 컴퓨터에 의존하고 있다. computer[부모]=[(자식1,해킹시간1),(자식2,해킹시간2)...] computer[1]=[(2,2),(3,8)] computer[2]=[(1,2)] computer[3]=[] 3번 컴퓨터가 해킹된다.현재 시간은 0초 [지금 시간 + 해킹에 걸리는 시간] from collections import deque t = int(input()) for _ in range(t): n, d, c = map(int, input().split()) # n= 컴퓨터 개수, d= 의존성 개..

[3020] 개똥벌레 In python

누적합으로 먼저 접근하여 코드를 작성했다. 원하는 답이 나와서 아싸! 이러고 백준에 제출을 했는데 아니.. 시간초과요 .. ? python3로 했다가 시간초과가 떠서 pypy3로 돌려봤다. 응 역시 안된다.. ㅎ 똑같이 시간초과가 떠서 좀 고민하다가 결국 구글링.. n, h = map(int, input().split()) array = [int(input()) for _ in range(n)] # 짝수 - 석순, 홀수 - 종유석 answer = [0 for _ in range(h)] for idx, now in enumerate(array): if idx % 2 == 0: # 석순 for i in range(0, now): answer[i] += 1 continue else: # 종유석 for i in..

[9084] 동전 In python

> dp 윽.. 너무 싫어하는 dp 문제다 ㅠㅠ 이 문제는 동전의 종류가 주어지고 주어진 금액을 만드는 모든 방법을 세서 출력하는 문제다. 동전의 종류 2, 3, 5원 목표 금액 10원 위 예시의 과정을 풀어보기 1 2 3 4 5 6 7 8 9 10 2원 0 1 0 1 0 1 0 1 0 1 3원 0 1 0+1 1+0 0+1 1+1 0+1 1+1 0+2 1+1 5원 0 1 1 1 1+1 2+0 1+1 2+1 2+1 2+2 총 4가지의 방법이 있다. 위 과정을 dp 방식으로 코드를 작성하면 아래와 같다 for i in range(int(input())): n = int(input()) coins = list(map(int, input().split())) m = int(input()) dp = [0 for ..

[14891] 톱니바퀴 in python

> 구현 > 시뮬레이션 처음에는 회전하는 톱니바퀴의 번호에 따라 연산을 다르게 해야 하는 줄 알았다. 그래서 회전하는 톱니바퀴가 1번이면 오른쪽만 쭉 확인하고 4번이면 왼쪽 톱니바퀴만 확인하고 둘다 아니면 왼쪽 오른쪽 모두 확인을 해야하는데 이렇게 하게 되면 연산이 너무 복잡해질 것 같아서 다른 방법을 강구해보았다 최종적으로 생각한 방법은 해당 톱니바퀴의 왼쪽과 오른쪽을 각각 확인하는 거다 회전하는 톱니바퀴의 번호에 따라 나누지않고! 회전하는 해당 톱니바퀴의 왼쪽에 있는 톱니바퀴를 회전시킨다. 오른쪽에 있는 톱니바퀴를 회전시킨다. 재귀함수를 이용해서 왼쪽, 오른쪽에 있는 톱니바퀴를 탐색한다. from collections import deque gear = [deque(map(int, input())) ..