import sysN, K = map(int, input().split())money = list(map(int, sys.stdin.read().splitlines()))cnt = 0for m in money[::-1]: if(m > K) : continue cnt += (K//m) K = K % m if(K == 0): breakprint(cnt) - 동전들이 오름차순으로 차례대로 주어졌기 때문에 이를 고려하여 입력받은 동전 리스트를 역순으로 만들어서 for 문에 넣었음 - 최소 동전 개수를 저장하기 위한 cnt 라는 변수를 생성 => 이를 이용해서 반복문에서 계산식 저장- K가 목표하고자 하는 금액이고, 반복문에서의 m은 보유하고 있는 동전 (큰 금액부터 하나씩) 이므로 m이 ..
Python
파도반 수열을 토대로 N번째 정삼각형의 변의 길이를 구하는 문제이다. P1P2P3P4P5P6P7P8P9P10P111112 (1+1)23 (1+2)4 (1+3)5 (1+4)7 (5+2)9 (7+2)12 (9+3) 예시 그림을 이용하여 위 표를 작성해보았고, 이를 토대로 다음과 같은 점화식을 도출할 수 있었다! P[n] = P[n-1] + P[n-5] 주목했던 부분은 P6부터 모든 항이 바로 직전 항인 [n-1] 과 5회 전 항인 [n-5]의 합으로 구성되어 있다는 것을 발견했다.다만 이는 n-5 식을 포함하는 만큼 P1~P5까지는 해당되지 않는데, 이러한 부분은 그냥 처음에 동적 배열 선언 시 초기항으로 부여해놓는 식으로 설정하였다. (어차피 항 개수 몇 개 되지도 않으니..) import sysT = i..
지그재그의 순서를 문제 설명을 통해서 이해하는 것이 다소 까다로워서, 아래처럼 내가 표로 순서를 적어보았다. 126715163581417 491318 101219 1120 21 1번부터 시작해서 대각선으로 색칠하듯이 내려가는 것이 특징이다.이를 토대로 순서를 고려하여 구분된 배열을 만들어보자면 다음과 같다. 1/11/2 2/1 3/1 2/2 1/31/4 2/3 3/2 4/15/1 4/2 3/3 2/4 1/5... 이제 여기서 나름대로의 규칙성을 찾아야 하는것이 중요한 과제인 것 같다.각 줄 별로 이어지는 규칙을 찾으려니 안보여서 홀수와 짝수 번째 줄끼리의 공통점을 각각 찾아보았고, 이는 다음과 같다. 홀수 번째 줄 : 분자가 1씩 줄어듦 & 분모가 1씩 늘어남짝수 번째 줄 : 분자가..
위 테스트케이스 예시를 단계별로 풀어보면 다음과 같다. # [(0, 3), (1, 2), (2, 1), (3, -3), (4, -1)] : 1# [(3, -3), (4, -1), (1, 2), (2, 1)] : 4# [(4, -1), (1, 2), (2, 1)] : 5# [(2, 1), (1, 2)] : 3# [(1, 2)] : 2 풍선들의 현재 순서 (인덱스) 와 풍선 안에 적혀있는 번호 모두 사용해야 하므로 enumerate를 사용해야 겠다고 판단함.따라서 위처럼 리스트 내에 각 풍선별로 (인덱스, 숫자) 쌍으로 구성되어 있다. 리스트를 큐처럼 사용해볼까 하다가 앞뒤로 이어져 있기도 하고 각 풍선의 숫자만큼 이동한다는 점에서 데크로 사용하는 것이 좋을 듯 싶어서 deque를 호출하였음 참고로 dequ..
시간 제한이 굉장히 타이트한 문제이다.처음엔 매번 num에서 가능한 제곱수를 찾아 빼는 방식으로 작동시켰었는데, 이는 큰 수에 대해 매우 비율적이기 때문에 dp 배열을 만들어 각 숫자를 만들 수 있는 제곱수의 최소 개수를 저장하도록 작성하였다. 동적 계획법(DP) ?- 각 숫자를 만들 수 있는 최소 제곱수의 개수를 저장하고, 그 값을 이전에 계산된 결과를 활용해 구하는 방법 import mathnum = int(input())dp = [float('inf')]*(num + 1)dp[0] = 0 # 0을 만들기 위한 최소 제곱수 개수는 0for i in range(1, num + 1): for j in range(1, int(math.sqrt(i))+ 1): dp[i] = min(dp[i..
N, M = map(int, input().split())arr= [[0 for _ in range(M)] for _ in range(N)] # 2차원 배열 for i in range(N): temp = list(map(int, input().strip())) for j in range(M): arr[i][j] = temp[j]final = 1max_len = min(N, M) # 정사각형의 최대 길이 (둘 중 더 짧은 것)for length in range(1, max_len): for i in range(N-length): for j in range(M-length): a = arr[i][j] b = arr[i + len..