본문 바로가기

728x90

기타/algorithm

(14)
요세푸스 순열 파이썬으로 풀기 요세푸스 순열은 n까지의 숫자들이 있는 리스트에서 k번째 숫자를 제거하고 그것을 순서대로 기록한 것이다. 3,6,2,7,5,1,4라는 결과가 나옵니다. 아래 풀이는 첫 번째 풀이로 여러 가지 상황을 코드 화해서 풀었습니다. 발생할 수 있는 경우의 수가 제거하고자 하는 숫자의 위치가 인덱스 안에 있을 때 그러니까 1,2,3,4,5,6,7에서 1이 첫 번째 숫자라고 할 때 3번째 숫자인 3을 제거하고 첫 번째 숫자가 4가 되었을 때 6을 제거한다. 이제 다음으로 첫 번째 숫자는 7이 된다. 이때는 다르게 처리를 해주어야 한다. 첫 번째 숫자의 인덱스에서 단순히 제거하고자하는 거리에 있는 것을 하면 indexerror이 나온다. 7이 첫 번째 숫자일 때 제거해주어야 하는 것은 2이다. 인덱스가 한 바퀴 돌았을..
큐 자료구조 예시 문제 카드2 balmostory.tistory.com/29 큐와 덱, 간단하게 정리하기. 오늘은 큐와 덱 자료구조에 대해 알아보도록 하겠습니다. 큐는 FIFO방식의 자료구조입니다. First in first out, 먼저 들어간 것이 먼저 나오는 자료구조로, 줄 서서 기다리는 사람들을 생각하면 됩니 balmostory.tistory.com 오늘은 큐를 이용해 백준의 카드 2문제를 풀어보도록 하겠습니다. www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 지난 시간 보았던 것..
큐와 덱, 간단하게 정리하기. 오늘은 큐와 덱 자료구조에 대해 알아보도록 하겠습니다. 큐는 FIFO방식의 자료구조입니다. First in first out, 먼저 들어간 것이 먼저 나오는 자료구조로, 줄 서서 기다리는 사람들을 생각하면 됩니다. 큐의 특징은 입구와 출구가 다르다는 것입니다. 그리고 입구와 출구의 역할은 정확하게 구분되어 있습니다. 입구는 데이터를 삽입하는 곳이고, 출구는 데이터를 삭제하는 곳입니다. 입구에서 이루어지는 것이 인큐이고, 삭제 연산을 디큐라고 부릅니다. 큐의 기능으로는 자료를 넣고 빼는 push와 pop이 있고 가장 처음 자료를 가리키는 front, 큐의 가장 마지막 자료를 가르키는 back, 큐의 크기를 알려주는 size, 큐가 비었는지 아닌지 알려주는 empty가 있습니다. 큐가 활용되는 상황을 생각해..
동적 계획법(dynamic programming) 알아보기 동적 프로그래밍은 큰 문제를 작은 문제로 나누어 푸는 문제입니다. 분할 정복과는 어떤 차이가 있을까? 사실 거의 비슷하지만 작은 문제가 중복이 일어나는지 안 일어나는지에서 큰 차이가 있습니다. 분할 정복은 큰 문제를 해결하기 어려워 작은 문제로 나누어 푸는 방법, 구체적으로 문제를 나눌 수 없을 때까지 나누어서 각각을 푸는 방법입니다. 대표적으로 병합 정렬이 있습니다. 동적 프로그래밍은 작은 부분 문제들의 반복으로 푸는 방법입니다. 동적 프로그래밍의 대표적인 기법 중에 메모이제이션이 있습니다. 한 번 계산한 작은 문제를 저장해놓고 다시 사용합니다. 피보나치수열을 예로 들어 보면 점화식은 '다음 수열=이전 수열+ 전전 수열'입니다. 3번째 숫자를 구하기 위해서는 1번째와 2번째 숫자가 필요합니다. 그리고 ..
동적 계획법 백준 예제로 배워보기 동적 계획법은 전체 문제를 작은 문제로 나누고 이를 점화식으로 만들어 재귀로 문제를 해결하는 알고리즘입니다. 1. 부분 문제를 정의한다. 2. 점화식을 만든다. 3. 작은 문제를 해결한 방법으로 전체 문제를 해결한다. www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 1로만들기 문제를 예제로 한 번 살펴보도록 하겠습니다. 정답률이 30%대인 어려운 문제입니다. 1. 부분 문제를 정의해 보도록 하겠습니다. 1로 만들기 위해서는 3으로 나누거나 2로 나누거나 1로 빼주어야 합니다. 어떤 것이 최소 연산 횟수를 보장하는지 알 수 없기 때문에 각각으로 경로를 나누어 최소 경로를 찾..
백트래킹 알고리즘(Backtracking) 개념과 예시 백트래킹은 어떤 문제를 풀 때 사용하는 알고리즘인가? 한정 조건을 가진 문제를 풀 때 사용하는 알고리즘이다. 그런 문제들은 주로 최적화문제이거나 결정 문제이다. 또한 상태공간을 트리로 나타낼 수 있을 때 사용하는 알고리즘이다. 상태공간 트리란 문제 해결 과정의 중간 상태를 각각 한 노드로 나타낸 트리이다. 한정 조건을 가진다는 것은 원소의 순서와 해결 방법이 무관하다는 의미이다. 모든 조합을 시도해 문제의 해를 찾는 것이다. 해를 얻을 때까지 모든 가능성을 시도한다는 말이다. 보통 재귀함수로 구현된다. 우선탐색과 비슷한 면이 있으나 기억 공간을 덜 차지한다는 점에서 다르다. 예를 들어 지금의 경로가 해가 될 것같지 않으면 해당경로를 제외하고 탐색한다. 이를 가지치기라 부른다. 이렇게 함으로써 쓸데없는 과..

728x90