본문 바로가기

반응형

코딩

(89)
[Python] 백준 15988 1, 2, 3 더하기3 https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 코드 작성 dp = [0] * 1000001 dp[0] = 1 dp[1] = 1 dp[2] = 2 for i in range(3, 1000001): dp[i] = (dp[i-1] + dp[i-2] + dp[i-3])%1000000009 t = int(input()) for _ in range(t): n = int(input()) print(dp[n]%1000000009) 코드 풀이 #1 위 방법 처럼 각 숫자를 나타낼 수 있는데 4의 값을 표현하는..
[Python] 백준 1699 제곱수의 합 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 코드 작성 import sys input = sys.stdin.readline n = int(input()) dp = [i for i in range(n+1)] for i in range(1, n+1): for j in range(1, i): if j*j > i: break if dp[i] > dp[i-j*j] + 1: dp[i] = dp[i-j*j] + 1..
[Python] 백준 2475 검증수 https://www.acmicpc.net/problem/2475 2475번: 검증수 컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들 www.acmicpc.net 코드 작성 k = list(map(int, input().split())) sum = 0 for i in range(5): sum += k[i]*k[i] print(sum%10)
[Python] 백준 11053 가장 긴 증가하는 부분 코드 작성 n = int(input()) dp = [1 for _ in range(1001)] arr = list(map(int, input().split())) for i in range(n): for j in range(i): if arr[i] > arr[j]: dp[i] = max(dp[i], dp[j] + 1) print(max(dp)) 코드 풀이 # 문제풀이1 dp 테이블에는 모든 값을 1로 세팅한다. arr = [10, 20, 10, 30, 20, 50] 예를 들어, dp[3]을 구하기 위해서는 for 구문에서 i = 3, j = 0 일 때 dp[3] = max(dp[3], dp[0] + 1) 임에 따라 2가 된다 i = 3, j = 1 일 때 dp[3] = max(dp[3], dp[1] + ..
[Python] 백준 2798 블랙잭 코드 작성 n,m = map(int, input().split()) arr = list(map(int, input().split())) ans = 0 for i in range(n): for j in range(i+1, n): for k in range(j+1, n): if arr[i] + arr[j] + arr[k] > m: continue else: ans = max(ans, arr[i] + arr[j] + arr[k]) print(ans) 코드 풀이 #1. 3개의 수를 비교해야 하므로 for문을 3개 사용한다. 이때 주의해야 할 점이 범위!!! arr의 리스트 중에서 첫 번째 수 i는 인덱스 0부터 n-1이다. 그럼 두 번째 수 j는 i+1부터 시작하며, 세 번째수 k는 j+1부터 시작한다. #2...
[Python] 백준 2231 분해합 코드 작성 n = int(input()) ans = 0 for i in range(1, n+1): k = i +sum(map(int, str(i))) if k == n: ans = i break print(ans) 코드 풀이 #설명 n은 자연수이므로 range의 범위 (1, n+1)로 설정한다. 2이상의 자리수의 각 문자열(str)을 map, int로 받아서 더한다. 그 값 k가 초기값 n일 때 ans에 정답을 넣는다. 가장 작은 숫자를 구하는 문제이므로 i는 1부터 시작하되, 생성자를 구했을 경우 for문을 종료해야 하므로 break
[Python] 백준 7568 덩치 코드 작성 n = int(input()) arr = [ ] for _ in range(n): x, y = map(int, input().split()) arr.append([x,y]) for i in arr: rank = 1 for j in arr: if i[0] < j[0] and i[1] < j[1]: rank += 1 print(rank, end = ' ') 코드 풀이 #. 몸무게와 키를 리스트(arr)에 넣는데, arr = [[x0, y0], [x1,y1], [x2,y2]...] 이와 같은 방식으로 넣는다. rank를 1로 기록하고 i가 0일때 j가 0,1,2,3,4와 비교하고 rank를 1씩 증가시키고 rank를 출력한다. 마찬가지로 i가 1일때 j가 0,1,2,3,4와 비교한다.
[Python] 백준 1912 연속합 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 코드 작성 n = int(input()) k = list(map(int, input().split())) ans = [k[0]] for i in range(1,n): ans.append(max(ans[i-1]+k[i],k[i])) print(max(ans)) 코드 풀이 #문제 이해 인덱스 0부터 i까지의 합이 큰 지, 또는 i의 값이 큰 지를 비교하는 문제이다. 물론 문제에서는 중간 값 중에서 여러 개를 요..

반응형