목록Algorithm (160)
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..
입출력(3) 알고리즘의 가장 기본인 입출력 문제들 2438 별 찍기 - 1 https://www.acmicpc.net/problem/2438 2438번: 별 찍기 - 1 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 www.acmicpc.net 풀이 n = int(input()) for i in range(1, n+1): print('*' * i) 2439 별 찍기 - 2 https://www.acmicpc.net/problem/2439 2439번: 별 찍기 - 2 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. www.acmicpc.net 풀이1 n = int(input..
입출력(2) 알고리즘의 가장 기본인 입출력 문제들 11718 그대로 출력하기 https://www.acmicpc.net/problem/11718 11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다. www.acmicpc.net 풀이1 while True: try: print(input()) except EOFError: break 풀이2 import sys for line in sys.stdin: print(line, end='') 11719 그대로 출력하기 2 https://www.acm..
입출력(1) 알고리즘의 가장 기본인 입출력 문제들 2557 Hello World https://www.acmicpc.net/problem/2557 2557번: Hello World Hello World!를 출력하시오. www.acmicpc.net 풀이 print('Hello World!') 1000 A+B https://www.acmicpc.net/problem/1000 1000번: A+B 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 A와 B가 주어진다. (0 < A, B < 10) 출력 첫째 줄에 A+B를 출력한다. 예제 입력 1 복사 1 2 예제 출력 1 복사 3 힌트 여기를 누르면 1000번 예제 소스를 볼 수 있습니다.... www.acmicp..
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)으로 순차 탐색보다 더 효율적이다..