목록PYTHON (5)
alpyrithm_알파이리즘
DP 11726 2xn 타일링 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제 풀기 전 공부할 것 : DP 풀이 2xN의 타일링의 경우 2x(N-1) 타일링에 2x1 타일을 붙이는 경우 2x(N-2) 타일링에 1x2 타일 2개를 붙이는 경우 1과 2의 경우의 합이므로 dp(N) = dp(N-1) + dp(N-2)가 점화식이 된다. n = int(input()) dp = [0] * (n+1) for i in range(1, n+1): if i == 1: dp[i..
DP 1463 1로 만들기 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 풀기 전 공부할 것 : Dynamin Programming(동적 프로그래밍) 풀이 1 점화식 정수 X로 1을 만드는 연산 횟수 dp[x-1] + 1 : x-1로 1을 만드는 연산에 1을 더한 값 dp[x//2] + 1 : x/2로 1을 만드는 연산에 1을 더한 값 dp[x//3] + 1 : x/3로 1을 만드는 연산에 1을 더한 값 위의 3가지 경우의 값 중 가장 작은 값이 정수 X로 1을 만드는 연산 횟수의 최솟값이다. n = int(input()) dp = [0 for _ i..
1-3. 탐색과 정렬(2) B - 1181 단어 정렬 https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 문제 풀기 전 공부할 것 : 정렬, set 풀이 1 같은 단어가 여러 번 입력된 경우에는 한 번만 출력한다 --> set() 이용 정렬할 때 길이가 짧은 것부터, 길이가 같으면 사전 순 --> sorted()로 사전 순으로 정렬 후 길이가 짧은 것부터 출력한다 ==> 정답이긴 하나 시간이 오래 걸리고 난잡한 느낌이 있다. def sort_s..
1-3. 탐색과 정렬(2) A - 1026 보물 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다. www.acmicpc.net 문제 풀기 전 공부할 것 : 정렬, 탐색 풀이 1 A의 최소와 B의 최대를 짝 지어주면 된다. B를 재배열하면 안 되므로 A를 sort()하고 B의 최대의 index를 A와 연결해준다. N = int(input()) A = list(map(int, input().split())) B = list(map(int, i..
1-1. 탐색과 정렬 (1) A - 1920 수 찾기 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다. www.acmicpc.net 문제 풀기 전 공부할 것 : 이진 탐색, 정렬 풀이 1 이진 탐색은 값을 비교할 때마다 찾는 값이 있을 범위를 절반씩 좁히면서 탐색하는 효율적인 탐색 알고리즘이다. 이진 탐색의 계산 복잡도는 O(logn)으로 순차 탐색보다 더 효율적이다..