문제 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 코드 My answer import sys input = sys.stdin.readline n = int(input()) n_list = sorted(list(map(int, input().split()))) m = int(input()) m_list = list(map(int, input().split())) def binary_search(start, end, target): if (start > end)..
문제 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 코드 My answer import heapq import sys input = sys.stdin.readline INF = int(1E9) N, M, K, X = map(int, input().split()) graph = [[] for _ in range(N+1)] distance = [INF for _ in range(N+1)] answer = 0 for i in range(M):..
문제 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 코드 My answer from itertools import combinations import sys input = sys.stdin.readline L, C = map(int, input().split()) letter = list(input().split()) vowels = ['a', 'e', 'i', 'o', 'u'] a = list(combinations(letter, L)) a = ["".join(sorted(i)) for i in a] for i..
문제 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 코드 My answer # 메모리 49440 KB / 시간 1516 ms import sys input=sys.stdin.readline t_c=int(input()) for k in range(t_c): n=int(input()) sticker=list(list(map(int,input().split())) for _ in range(2)) dp = [[0]*(n+1) for _ in range(2)] dp[0][1],dp[1][1]=stick..
문제 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 코드 My answer import sys input=sys.stdin.readline n=int(input()) num=list(map(int,input().split())) dp=[0]*n for i in range(n): if(num[i]>=0):dp[i]=max(0,dp[i-1])+num[i] else: if(dp[i-1]+num[i]>=0): dp[i]=dp[i-1]+num[i] else: dp[i]=num[i] print(max(dp)) Another an..
문제 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 코드 My answer import sys input = sys.stdin.readline n=int(input()) dp=[0]*n dp[0]=1 array=list(map(int,input().split())) for i in range(1,n): tmp=[dp[j] for j in range(i) if(array[j]
문제 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 코드 My answer import sys input = sys.stdin.readline n=int(input()) dp=[0]*(n+1) array=[] for i in range(int(n**0.5)+1): dp[i*i]=1 for i in range(1,n+1): for j in range(1,int(i**0.5)+1): if(dp[i]==0):dp[i]=dp[j*j]+dp[i-j*j] else: dp[i]=min(..