본문 바로가기

알고리즘/백준-파이썬

(52)
[백준] 1912번 (python 파이썬) https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 주어진 수열과 같은 크기를 같는 배열을 만들어서 주어진 수열의 각 인덱스로 연속합이 끝나는 값으로 할당한다. 예를 들어보자. 주어진 수열을 A, 우리가 만들 수열을 B라고 한다. A = [ 10, -4, 3, 1 ] 이면 B[0] = 10 B[1] = -4과 10-4 중 큰 것 B[2] = 3과 -4+3과 10-4+3 중 큰 것 B[3] = 1과 3+1과 -4+3+1과 10-4+3+1 중 큰 것 B = [ ..
[백준] 14002번 (python 파이썬) https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 11053번과 비슷한 문제이다. 11053번 문제를 풀 수 있어야 이 문제도 풀 수 있다. HTML 삽입 미리보기할 수 없는 소스 두 문제의 차이점으로는 11053번은 길이를 출력했지만, 이 문제는 길이 뿐 아니라 LIS 그 자체도 출력해야 한다. 11053번의 경우는 길이를 출력하기위해 길이정보를 메모이제이션을 했..
[백준] 11053번 (python 파이썬) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이 문제는 LIS 라는 유명한 문제라고 한다. 처음 이 문제를 읽고 DP가 왜 필요하지? 생각했다. 맨 처음수를 temp에 넣고 다음 수와 비교하면서 큰수가 나오면 바꿔치기 하고 count하면 될 줄 알았다. 즉, 1, 3, 5, 4, 6라는 수열이 있다면 1을 temp에 넣고 3과 비교, temp에 3을 넣고 coun..
[백준] 2193번 (python 파이썬) https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 부분 반복 구조 : 위의 그림과 같음 최적 부분 구조 : n일때 최적의 값을 가지기 위해선 n-1일때 최적의 값을 가져야 한다. (애초에 여러값을 가질 수 없는 문제이다) 메모이제이션 : 입력받는 n보다 1 더 크게 배열을 만들어 놓는다. n값과 인덱스를 맞추기 위함이다. 접근 방식 : n이 1일때의 값을 알고 있으므로 bottom - up 으로 접근하기가 쉽다. n = int(inpu..
[백준] 10884번 (python 파이썬) https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 계단 수(n) 은 계단 수(n-1) 와 계단 수(n-1)의 끝자리인 수 ± 1 가 이어진 수 예를 들어 1234 = 123 와 123의 끝자리인 3 + 1 이 이어진 수 1232 = 123 와 123의 끝자리인 3 - 1 이 이어진 수 즉, 계단 수(n)의 끝자리 수는 계단 수(n-1)의 끝자리 수의 +1인 수이거나 -1인 수이다. 이를 통해 다음과 같은 규칙을 찾을 수 있다. num = int(input()) cache = [[0 for _ in range(10)] for _ in range(num+1)] c..
[백준] 15990번 (python 파이썬) https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net import sys testcase = int(input()) cache = [[0 for _ in range(4)] for i in range(100001)] cache[1] = [0,1,0,0] cache[2] = [0,0,1,0] cache[3] = [0,1,1,1] for i in range(4, 100001): cache[i][1] = (cache[i-1][2] + cache[i-1][3]) cache[i][2] = (cache[i-2][..
[백준] 16194번 (python 파이썬) https://www.acmicpc.net/problem/16194 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 부분 반복 구조 : min_price[n] = min_price[0] + price[n] 또는 ... min_price[n-1] + price[1] 최적 부분 구조 : min_price에는 항상 가능한 최소의 값이 저장된다. 메모이제이션 : n+1 크기의 배열 min_price 생성 접근 방식 : bottom - up 방식 ( 이유 : min_price[1]을 알기 때문) N = int(input()..
[백준] 11052번 (python 파이썬) https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 부분 반복 구조 : max_price[n] = max_price[0] + price[n] 또는 ... max_price[n-1] + price[1] 최적 부분 구조 : max_price에는 항상 가능한 최대의 값이 저장된다. 메모이제이션 : n+1 크기의 배열 max_price 생성 접근 방식 : bottom - up 방식 ( 이유 : max_price[1]을 알기 때문) N = int(input()) ..