본문 바로가기
728x90

알고리즘141

[BOJ/Python] 16234. 인구 이동 📌 문제 https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 📌 문제 접근 방법 우선, 첫 번째 인구 이동이 일어나는 과정을 먼저 구현해보았다. 방문한 적이 없는 곳이면 bfs(find_unit 함수)를 통해 연합을 구성하고 → 연합의 길이가 1보다 크다면 인구이동이 일어나므로 move함수를 통해 인구를 이동시킨다. 위의 코드를 이용해서 인구 이동이 더 이상 일어날 수 없을 때까지 인구 이동을 진행하고, 인구 이동이 일어날 때 마다 .. 2021. 10. 7.
[Algorithm] 병합 정렬, 퀵 정렬 병합 정렬 (Merge Sort) 여러 개의 정렬된 자료의 집합을 병합하여 한 개의 정렬된 집합으로 만드는 방식 분할 정복 알고리즘 활용 자료를 최소 단위까지 나눈 후, 차례대로 정렬하여 최종 결과 얻어냄 top-down 방식 시간 복잡도 : O(nlogn) # 병합 def merge(left, right): # left: [1] # right: [3, 4, 5] result = [] while len(left) > 0 and len(right) > 0: if left[0] 0: result.extend(right) if len(left) > 0: result.extend(left) return result # 분할 def merge_sort(arr): if len(arr) right: break # 만.. 2021. 10. 6.
[BOJ/Python] 1240. 노드사이의 거리 📌 문제 https://www.acmicpc.net/problem/1240 1240번: 노드사이의 거리 N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라. www.acmicpc.net 📌 문제 접근 방법 인접 행렬을 만들고 노드 간 연결이 된 곳에 거리를 저장! → 시간 초과 인접 리스트로 바꾸고 리스트에 연결된 노드번호와 거리를 함께 저장 후 bfs로 탐색 인접 행렬로 그래프 탐색을 하는 경우 시간 초과가 될 때가 종종 있어서 인접 리스트를 우선적으로 쓰는 것이 좋을 것 같다! 📌 코드 from collections import deque def distance(x, y): queue = deque() queue.. 2021. 10. 4.
[SWEA/Python] 1244. 최대 상금 📌 문제 https://swexpertacademy.com/main/main.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 📌 문제 접근 방법 앞 쪽에 위치한 숫자판보다 큰 숫자가 뒷쪽에 있다면 그 둘을 바꾸는 방법 → 32888 같은 경우에 틀리게 된다. 모든 경우의 수를 다 찾아서 비교해보자! → 재귀로 구현했으나 시간초과! 가지치기가 가능한가? 뒷 쪽 숫자가 더 클 경우에만 교환을 하는 방식 교환 횟수에 따라 따로 리스트에 값을 저장하여 중복을 방지 두 번째 경우엔 시간 초과없이 값이 잘 나왔다! 📌 코드 import sys sys.stdin = open('input.txt') def change(.. 2021. 10. 4.
728x90