카테고리: Algorithm

0

백준 1654 랜선 자르기

백준 1654 랜선 자르기는 전형적인 이분 탐색 문제이다. 문제에서 1~ 2^31-1에 해당하는 랜선길이에 대해 필요한 랜선 개수를 만들 수 있는 최대 랜선 길이를 알아내 출력하는 문제이다. 2^31-1 까지 모든 길이에 대하여 해보면 답은 나오겠지만 이 방법은 너무 느려 시간초과가 뜰 것이다. 그렇다면 여기서 이분 탐색을 이용하여 문제를 풀어나갈

0

백준 9933 민균이의 비밀번호

백준 9933 민균이의 비밀번호는 주어지는 문자열이 주어진 문자열 집합에서 거꾸로 된 것과 같은 것이 있는지 확인하고 찾아 출력하는 문제이다. 너무 간단한 문제라고 생각하고 주어진 문자열에서 뒤집어서 같은 문자열이 있는지만 확인했는데 오답이 나와 무엇이 잘못됬는지 잘 몰랐다. 이 문제에는 예외가 존재하는데 길이가 1일 때와 여러개의 문자열이 있어도 문

0

백준 9935 문자열 폭발

백준 문자열 폭발은 문자열과 폭발 문자열이 주어지고 폭발 문자열을 입력받아 이 폭발문자열을 터뜨려 나온 최종 문자열을 구하는 문제이다. 폭발 문자열이 터져서 또한번 폭발문자열을 이룰 수 있으니 이점에 주의하여 풀어야 한다. 처음에는 단순히 str.find(“폭발문자열”)을 찾아 서브 스트링으로 조합한뒤 찾을 문자열이 없을때 까지 진행했는데 이 방법은

0

백준 14888 연산자 끼워넣기

백준 14888 연산자 끼워넣기는 아주 쉬운 dfs문제이다. 숫자 1 2 3 4 5 6 이 주어지고 사용할 수 있는 연산자 + - * / 의 갯수가 주어지면 이 연산을 사용하여 앞에서부터 차례대로 연산한 결과의 최대값, 최솟값을 구하는 문제이다. 연산자 우선순위를 고려해야 하는 문제이면 꽤나 까다로운 문제이겠지만 순서대로 계산하므로 어렵지 않은 문제

0

삽입 정렬

삽입 정렬은 정렬된 상태의 영역을 확대해 나가면서 그 다음의 후보가 삽입될 위치를 찾아 삽입한 뒤 그 다음 원소들을 밀어내는 방식으로 동작한다. 처음의 영역의 크기는 1로 가장 첫번째 원소만 포함한다. 위의 그림을 보면 5라는 원소가 크기 1인 영역에 속해 있고 2라는 다음 원소를 이 영역에 집어 넣는데 이 영역의 원소들과 비교해서 더 큰 숫자를 만나

0

버블 정렬

버블 정렬은 가장 큰 원소를 바깥쪽으로 밀어내는 방식으로 정렬하는 방식이다. 처음 원소부터 자신의 다음 원소와 비교하여 더 큰 숫자를 비교하며 더 큰 숫자를 교환하여 뒤로 밀어내는 방식으로 정렬을 한다. 위의 그림을 보면 첫번째 원소 9와 6을 보고 9가 더 크므로 9를 뒤로 밀어내고 그 다음으로 넘어가 9와 2를 비교해 9가 더크니 위치를 다시 바꾼

0

병합 정렬

병합정렬은 퀵정렬과 대표되는 O(nlogn)의 시간복잡도를 가진 정렬로 최악에 O(n2)의 시간복잡도를 가지는 퀵정렬과 달리 모든 경우의 O(nlogn)의 시간복잡도를 가지는 정렬이다. 또한 퀵정렬이 분할해 나가면서 정렬하는 방식이었다면 병합정렬은 모두 분할한 뒤 그 결과를 합치는 방법으로 약간의 차이가 있다. 병합정렬의 단점은 병합된 결과를 저장하기

0

선택 정렬

선택정렬은 데이터의 원소중에 가장 작은 최솟값의 인덱스를 찾은뒤 이를 교환해 주는 방법으로 동작한다. 위의 첫번째 단계를 보면 1이라는 최소 원소를 찾은 뒤 가장 이를 8의 원소의 위치와 교환해 주어 가장 최소의 값을 앞에 위치 시키는 것으로 볼 수 있다. 그 다음 최소값을 찾으면 3을 찾았고 그 다음 최솟값이 위치해야 할 5의 위치와 원소를 바꾸어

0

퀵 정렬

퀵 정렬은 O(nlogn)의 시간복잡도를 가지는 빠른 정렬로써 데이터를 기준이 되는 숫자보다 작은 숫자와 큰 숫자로 왼쪽 오른쪽 분류해나가는 방식으로 동작한다. 여기서 기준이 되는 숫자를 pivot이라고 하고 이 pivot을 잡는 방법에 대해 설명하겠다. pivot의 선택은 어느 숫자로 잡아도 상관이 없다. 가장 처음 or 마지막 or 중간 등 어떠

0

백준 11066 파일합치기

파일 합치기 문제는 인접한 파일을 합치고 합쳐진 파일을 다른 파일과 합쳐나가며 이 파일을 합치는데 필요한 비용을 최소화 하는 문제이다. 이 문제는 동적 계획법으로 풀 수 있다. 이 부분에 대한 개념은 구간에 대한 개념으로 나누어 보면 쉽게 풀 수 있다. 1 ~ n까지의 구간이 있다고 하면 1~n까지의 구간의 합을 최소로 만드는 것은 임의의 j에 대하여