목록Algorithm/CH 5. 응용 문제 (4)
토니의 연습장
# N 개 정수 입력 빠르게 하기# 대량의 정수를 입력 빠르게 하고자 하면 아래 재정의도 추가# input()을 재정의하여 더 빠른 sys.stdin.readline() 사용import sysinput = sys.stdin.readlineN = int(input())# 1. 한 줄에 하나씩 입력받기 일반적인 생각w1 = []for _ in range(N): w1.append(int(input()))# 2. 훨씬 빠른 방법 : list comprehension 이용w2 = [ int(input()) for _ in range(N)]# (참고) 띄어쓰기로 입력받을 때numbers1 = list(map(int, input().split()))
from itertools import combinationsN = int(input())w = []for _ in range(N): weight = int(input()) w.append(weight) # 오르차순 정렬w.sort()# k 개 선택tuples_list = [list(combinations(w,k)) for k in range(1,len(w)+1)]first_elements = [ [tuple[0] for tuple in tuples] for tuples in tuples_list]print(tuples_list)# 출력 & 최대 중량 저장max_weight = -1for i, sublist in enumerate(first_elements): print(f"tupl..
문제 7 3 8 8 1 0 2 7 4 44 5 2 6 5위 그림은 크기가 5인 정수 삼각형의 한 모습이다.맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.입력첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. 출력첫째 줄에 합이 최대..
문제수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.입력첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)출력첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 아래에서는 가장 긴 증가하는 부분 수열(LIS; Longest Increasing Subsequence)을 구하는 전형적인 동적 프로그래밍(DP) 풀이 방법(O(N^2) 접근)과 그 과정에 대해 상세히 설명하고..