본문 바로가기

분류 전체보기

(120)
[백준] 1676번 : 팩토리얼 0의 개수 (Python) 문제 : https://www.acmicpc.net/problem/1676 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 문제. 1. N!을 구해 0의 개수 세기import sysinput = sys.stdin.readlineN = int(input()) # Nfactorial = 1answer = 0 for i in range(2, N+1): factorial *= i # 팩토리얼 구하기 factorial = str(factorial)[::-1] # 문자열 역순으로 배치 for i in factorial: if(i == '0'): # 0이면 answer += 1 else: # 아닐 시 반복문 종료 break;print..
[백준] 6588번 : 골드바흐의 추측 (Python) 문제 : https://www.acmicpc.net/problem/6588  4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.이 골든바흐의 추측을 백만 이하의 모든 짝수에 대해서 검증하는 문제다. import sysinput = sys.stdin.readline# 에라토스테네스의 체로 소수 구하기def prime(N): a = [False,False] + [True]*(N-1) primes=[] for i in range(2,N+1): if a[i]: # 소수이면 primes.append(i) for j in range(2*i, N+1, i): # i의 합성수를 지움 a[j] = Fal..
[백준] 1929번 : 소수 구하기 (Python) 문제 : https://www.acmicpc.net/problem/1929 M이상 N이하의 소수를 모두 출력하는 문제. import sysinput = sys.stdin.readline# 소수 구하기def prime(N): a = [False,False] + [True]*(N-1) primes=[] for i in range(2,N+1): if a[i]: # 소수이면 primes.append(i) for j in range(2*i, N+1, i): # i의 합성수를 지움 a[j] = False return primesN, M = map(int, input().split()) # N, Mp..
[백준] 1699번 : 제곱수의 합 (Python) 문제 : https://www.acmicpc.net/problem/1699  자연수 N을 제곱수들의 합으로 표현할 때, 그 항의 최소개수를 구하는 문제. import sysinput = sys.stdin.readlineN = int(input()) # 자연수 NDP = [sys.maxsize]*(100001)DP[0] = 0DP[1] = 1for i in range(2, N+1): sqrt = int(i**(1/2)) # 제곱근 if(i == sqrt**2): DP[i] = 1 # 제곱일 경우엔 1 continue for j in range(sqrt//2, sqrt+1): DP[i] = min(DP[i], DP[i-(j**2)]+1) #..
[백준] 1912번 : 연속합 (Python) 문제 : https://www.acmicpc.net/problem/1912 n개의 정수로 이루어진 임의의 수열이 주어졌을 때,이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하는 문제다.import sysinput = sys.stdin.readlineN = int(input())card = list(map(int, input().split())) # 수열 입력받기# DP 테이블 생성for i in range(1, N): card[i] = max(card[i], card[i]+card[i-1]) # 구간합, 수열의 값 중 큰 값 저장print(max(card)) # 최댓값 출력  [문제풀이] 이 문제는 동적 계획법, 즉 DP를 이용해서 풀 수 있다.   수열 처음부터 구간합..
[백준] 14002번 : 가장 긴 증가하는 부분 수열 4 (Python) 문제 : https://www.acmicpc.net/problem/14002 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열과, 그 길이를 구하는 문제다. import sysinput = sys.stdin.readlineN = int(input())card = list(map(int, input().split())) # 수열 입력받기LIS = [[] for _ in range(N)] # 증가하는 수열의 길이를 저장할 배열# DP 테이블 생성for i in range(N): LIS[i] = [card[i]] # 초기값 세팅 for j in range(i): if(card[j]    [문제풀이] 이 문제는 동적 계획법, 즉 DP를 이용해서 풀 수 있다.   각 수열마다..
[백준] 11053번 : 가장 긴 증가하는 부분 수열 (Python) 문제 : https://www.acmicpc.net/problem/11053 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열의 길이를 구하는 문제다. import sysinput = sys.stdin.readlineN = int(input())card = list(map(int, input().split())) # 수열 입력받기length = [0]*(N) # 수열의 길이를 저장할 배열# DP 테이블 생성for i in range(N): length[i] = 1 for j in range(i): if(card[j]   [문제풀이] 이 문제는 동적 계획법, 즉 DP를 이용해서 풀 수 있다.   각 수열마다 증가하는 수열의 길이를 메모이제이션해나가며 문제를 푼다.  ..
[백준] 16194번 : 카드 구매하기 2 (Python) 문제 : https://www.acmicpc.net/problem/16194 카드 팩의 가격이 주어졌을 때, N개의 카드를 구매하기 위해 민규가 지불해야 하는 금액의 최솟값을 구하는 문제다. import sysinput = sys.stdin.readlineN = int(input())# 카드 값 얻기card = [0] + list(map(int, input().split()))# DP 테이블 생성for i in range(1, N+1): for j in range(1, i): card[i] = min(card[i], card[j] + card[i-j]) # 카드팩 N개를 구매할 때의 가격 중 작은 값을 설정print(card[-1])  [문제풀이] 이 문제는 규칙 찾기, ..