PS & Algorithm

PS & Algorithm/Basics

[PS-Basics] 3.4 자료구조 : 슬라이딩 윈도우

1.슬라이딩 윈도우 (Sliding Window) 특징 '연속된 배열 안에서 범위의 크기가 일정할 때' 2개의 포인터로 범위를 지정한 다음, 범위를 유지한 채로 이동하며 문제를 해결 서브 배열 합계 체크 import sys def max_sub_array(arr, k): maxsum = -sys.maxsize - 1 arraysize = len(arr) for i in range(arraysize - k + 1): current_sum = 0 for j in range(i, i + k): current_sum += arr[j] maxsum = max(maxsum, current_sum) return maxsum if __name__ == '__main__': print(max_sub_array([2, 4..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-3. 자료구조 : 투 포인터(3)

https://www.acmicpc.net/problem/1253 [G4] 좋다 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력 좋은 수의 개수를 첫 번째 줄에 출력한다. 예제 입력 1 10 1 2 3 4 5 6 7 8 9 10 예제 출력 1 8 힌트 3,4,5,6,7,8,9,10은 좋다. 기존의 투 포인터 유형 중 양끝에서 포인터들이 시작하는..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-3. 자료구조 : 투 포인터(2)

https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net [S4] 주몽 문제 주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장을 통해 철기군이 입을 갑옷을 만들게 하였다. 야철대장은 주몽의 명에 따르기 위하여 연구에 착수하던 중 아래와 같은 사실을 발견하게 되었다. 갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,00..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-3. 자료구조 : 투 포인터(1)

https://www.acmicpc.net/problem/2018 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net [S4] 수들의 합 5 문제 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다. 예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지..

PS & Algorithm/Basics

[PS-Basics] 3.3 자료구조 : 투 포인터

1. Two Pointer Algorithm 전제 투 포인터 알고리즘 : 리스트(배열)가 '정렬'이 되어있어야 함! 특징 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘 구간 합의 경우 오직 누적 합(합 배열)에서 기존의 배열을 순차적으로 접근(X), 기존의 배열의 합에 접근(O) 이기 때문에 다름 흔히 2,3,4,5,6,7번 학생을 지목해야 할 대 간단히 '2번부터 7번까지의 학생'이라고 부름 리스트에 담긴 데이터에 순차적으로 접근해야 할 때는 시작점과 끝점 2개의 점으로 접근할 데이터의 범위를 표현할 수 있음 Caution 포인터 2개가 모두 한 쪽 끝에서 시작할 수도 있으나, 양쪽 끝에서 시작할 수도 있음 연속한 구간 합을 구하는 경우 : 한 쪽 끝에서 시작 두..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-2. 자료구조 : 구간 합(3)

https://www.acmicpc.net/problem/10986 10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net [G3] 나머지 합 문제 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다. 입력 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 10*..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-2. 자료구조 : 구간 합(2)

https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net [S1] 백준 11660번 : 구간 합 구하기 5 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자. 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 여기..

PS & Algorithm/알고리즘 코딩테스트 Python

[PS - Do It!] 3-2. 자료구조 : 구간 합(1)

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net [S3] 백준 11659번 : 구간 합 구하기 4 문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총..

PS & Algorithm/Basics

[PS-Basics] 3.2 자료구조 : 구간 합

1. 구간합 (Prefix Sum) 1) 기존 배열 -> 누적합(합배열) : (주어진 배열의 합 배열을 전부 구해놓을 것) 2) 누적합(합배열) 더하거나 빼서 -> 구간 합 특징 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘 2. 과정 Process 1. 합 배열 구하기 : 리스트 A가 있을 때 합 배열 S는 다음과 같이 정의 • S[i] = A[0] + A[1] + A[2] + .... + A[i] • 기존의 리스트 데이터들을 전처리한 배열 • 합 배열을 미리 구해 놓으면 기존 리스트의 일정 범위의 합을 구하는 시간 복잡도가 O(N)->O(1) • S[i] = S[i-1] + A[i] : 1차원 배열 or temp += i으로 놓고 S.append(temp)하기 • ..

Jae.
'PS & Algorithm' 카테고리의 글 목록