[ STUDY ]/CodingTest 38

[ 정렬 ] 병합 정렬, 기수 정렬(백준 1517, 2750)

병합 정렬 : O(nlogn)분할 정복 방식을 사용해 데이터를 분할하고 분할한 집합을 정렬하여 합치는 알고리즘이다.병합과정이 총 logn만큼 일어난다.각각을 병합하는 과정은 n의 시간이 걸린다.(아래 설명)💡 2개의 그룹을 병합하는 과정투 포인터 개념을 사용해서 왼쪽 포인터와 오른쪽 포인터의 값을 비교하여 작은 값을 배열에 추가하고 포인터를 오른쪽으로 이동시킨다.이렇게 2개의 그룹을 병합하는 과정이 시간이 N만큼 걸린다.  1517 : 버블 소트문제N개의 수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에 대해서 버블 소트를 수행할 때, Swap이 총 몇 번 발생하는지 알아내는 프로그램을 작성하시오.버블 소트는 서로 인접해 있는 두 수를 바꿔가며 정렬하는 방법이다. 예를 들어 수..

[ 정렬 ] 삽입 정렬, 퀵 정렬(백준 11399, 11004)

삽입 정렬(Insertion Sort) : O(n2)이미 정렬된 데이터 범위에 정렬되지 않은 데이터를 적절한 위치에 삽입시켜 정렬 1️⃣  현재 index에 있는 데이터 값을 선택한다.2️⃣  현재 선택한 데이터가 정렬된 데이터 범위에 삽입될 위치를 탐색한다.3️⃣  삽입 위치부터 Index에 있는 위치까지 shift연산을 수행한다.4️⃣  삽입 위치에 현재 선택한 데이터를 삽입하고 index++연산을 수행한다.5️⃣  전체 데이터의 크기만큼 index가 커질 때까지, 즉 선택할 데이터가 없을 때까지 반복한다.6️⃣  비교 대상이 없을 때까지 1️⃣ ~ 5️⃣ 를 반복한다.☝🏻 적절한 삽입 위치를 탐색하는 부분에서 이진 탐색등과 같은 탐색 알고리즘을 사용하면 시간 복잡도를 줄일 수 있다.      O(..

[ 정렬 ] 버블 정렬, 선택 정렬 (백준 2750, 1427)

버블 정렬(Bubble sort) : O(n2)데이터의 인접 요소끼리 비교하고, swap연산을 수행하며 정렬하는 방식인접한 요소끼리 비교하고 가장 큰 수를 오른쪽으로 보내면서 진행한다.1️⃣  비교 연산이 필요한 루프 범위를 설정한다.2️⃣  인접한 데이터 값을 비교한다.3️⃣  swap 조건에 부합하면 swap연산을 수행한다.4️⃣  루프 범위가 끝날 때까지 2️⃣ ~ 3️⃣ 을 반복한다.5️⃣  정렬 영역을 설정하고, 다음 루프를 실행할 때는 이 영역을 제외한다.6️⃣  비교 대상이 없을 때까지 1️⃣ ~ 5️⃣ 를 반복한다.☝🏻 만약 특정한 루프의 전체 영역에서 swap이 한 번도 발생하지 않았다면 그 정렬은 정렬되었다는 뜻이다.!  2750 : 수 정렬하기문제N개의 수가 주어졌을 때, 이를 오름..

[ 자료구조 ] 스택과 큐(백준 1874, 2164, 11286)

Stack(스택)삽입과 삭제 연산이 후입선출로 이뤄지는 자료구조 스택은 깊이 우선 탐색(DFS), 백트래킹 종류의 문제에 자주 사용한다.  Queue(큐)삽입과 삭제 연산이 선입선출로 이뤄지는 자료구조 큐는 너비 우선 탐색(BFS)에서 자주 사용한다. 우선순위 큐들어간 순서와 상관없이 우선순위가 높은 데이터가 머저 나오는 자요구조큐 설정에 따라 front에 항상 최댓값 또는 최솟값이 위치한다.   1874 : 스택 수열문제스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 ..

[ 자료구조 ] 슬라이딩 윈도우(백준 12891)

슬라이딩 윈도우슬라이딩 윈도우 알고리즘은 2개의 포인터로 범위를 지정한 다음 범위를 유지한 채로 이동하며 문제를 해결한다.  12891 : DNA 비밀번호문제평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA”는 DNA 문자열이 아니지만 “ACCA”는 DNA 문자열이다. 이런 신비한 문자열에 완전히 매료된 민호는 임의의 DNA 문자열을 만들고 만들어진 DNA 문자열의 부분문자열을 비밀번호로 사용하기로 마음먹었다.하지만 민호는 이러한 방법에는 큰 문제가 있다는 것을 발견했다. 임의의 DNA 문자열의 부분문자열을 뽑았을 때 “AAAA”와 같이 보안에 취..

[ 자료구조 ] 투 포인터(백준 2018, 1940)

투 포인터리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 저장하면서 처리하는 알고리즘두 개의 포인터로 알고리즘의 시간 복잡도를 최적화한다. O(n)  2018 : 수들의 합(5)문제어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다.예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다.N을 입력받아 가지수를 출력하는 프로그램을 작성하시오.N의 최댓값은 10,000,000으로 매우..

[ 자료구조 ] 구간 합(백준 11659)

구간 합구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘. S[i] = A[0] + A[1] + A[2] + ··· + A[i]S[i] = S[i-1] + A[i]S[j] = S[i-1] // i에서 j까지 구간 합  11659 : 구간 합 구하기 4문제수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 실행 코드 기존 코드 -..

[ 자료구조 ] 배열과 리스트(백준 11720, 1546)

배열배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조배열의 값은 인덱스를 통해 참조할 수 있다. ex) A[3], B[0]새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다.배열의 크기는 선언할 때 지정되며, 크기를 늘리거나 줄일 수 없다. 리스트값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야한다. 즉, 값에 접근하는 속도가 느리다.데이터를 삽입하거나 삭제하는 연산 속도가 빠르다.선언할 때 크기를 별도로 지정하지 않아도 된다. 크기가 변하는 데이터를 다룰 때 적절하다.포인터를 저장할 공간이 필요하여 배열보다 구조가 복잡하다.  11720 : 숫자의 합 구하기 문제N개의 숫자가 공백 없이 쓰여있다. 이..