분할정복(Divide and Conquer)
·
💻 알고리즘/이론
분할정복 -주어진 문제를 둘 이상의 부분 문제로 나누어서 푸는 방법 -비슷한 크기로 문제를 나눔 -재귀호출 사용 분할정복 과정 Divide :부분 문제로 나눌 수 있는 경우 2개 이상의 문제로 나눈다. Conquer : 더 이상 나눌 수 없는 경우 현재 문제를 정복한다. Combine : 해결된 문제들을 병합하여 기존 문제를 해결한다. 분할 횟수 입력의 크기가 n이고 총 분할한 횟수가 k라면. -1번 분할 후 입력 크기 : n/2 -2번 분할 후 입력 크기 : n/2^2 ... -k번 분할 후 입력 크기 : n/2^k --> n/2^k 가 1 이라면 더 이상 분할 불가 분할 횟수 분할정복의 사용 1. 합병정렬(Merge Sort) 입력이 2개의 부분문제로 크기가 반씩 줄어드는 분할 정복 알고리즘 -n개의..
[2017 카카오코드 예선] 컬러링북 - 파이썬
·
💻 알고리즘/PS
문제 https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 영역의 수와 가장 큰 영역의 넓이를 구하는 문제이다. 문제풀이 흔히 볼 수 있는 bfs 문제와 유사하다. que에 좌표를 넣고 que가 빌 때까지 move를 이용해 주위 좌표(상,하,좌,우)를 탐색하고, 동일한 값을 지닌 좌표는 que에 추가해주는 방식으로 탐색을 진행한다. 해당 좌표를 방문했다면 check 값을 바꿔주어 방문 체크를 해준다. bfs를 새로 실..
[BOJ/백준] 9024 두 수의 합 - 파이썬
·
💻 알고리즘/PS
문제 https://www.acmicpc.net/problem/9024 문제풀이 num 배열을 정렬하고 k값 보다 큰지 아닌지 비교해가면서 이분탐색을 진행한다. 그 값이 k보다 크면 mid-1 값을 r로 설정해주고 작으면 min+1 값을 l로 설정해준다. k와 두 수의 합의 차이가 mini 값보다 작으면 mini 값을 없데이트 해주고 cnt=1로 초기화한다. mini 값과 같으면 cnt+=1을 해준다. 코드 import sys input=sys.stdin.readline t=int(input()) for i in range(t): n,k=map(int,input().split()) num=list(map(int,input().split())) num.sort() mini=200000000 for j in..
[BOJ/백준] 20041 Escaping - 자바,파이썬
·
💻 알고리즘/PS
문제 https://www.acmicpc.net/problem/20041 20041번: Escaping 첫 번째 줄에는 경찰의 수 N이 주어진다. 단, 1 ≤ N ≤ 500,000이다. 그 다음 N 개의 줄에는 각 경찰의 초기 위치의 좌표 (xi, yi)가 공백을 사이에 두고 주어진다. 다음 줄에는 도둑의 초기 위치의 좌 www.acmicpc.net icpc 2020 예선 F번 문제로 도둑과 경찰에 대한 정보가 주어졌을 때, 도둑이 경찰에게서 탈출할 수 있는지 판단하는 문제 문제풀이 도둑이 경찰에게서 가장 멀리 달아날 수 있는 방법은 4 방향 중 한 방향으로 직진 하는 방법이다. 각 경찰에 대해서 위, 아래, 왼쪽, 오른쪽 방향을 탐색한다. 한 번이라도 탈출할 수 있다면 초기 조건에서 탈출 가능한 것 e..