목록BOJ (335)
기록방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uRTbm/btrLOfXK4Ss/ViCUHXZt17pnEmbovTbwOk/img.png)
👉 문제링크 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 🔸 문제 분석 🔸 1과 n을 제외한 약수의 수와 목록이 입력된다. n을 출력한다. 🔸 코드 🔸 import sys n = int(sys.stdin.readline()) arr = list(map(int,sys.stdin.readline().rstrip().split())) arr.sort() print(arr[0]*arr[-1]) 🔸 코드 해석 🔸 빠른 입력을 사용했다. 약수 리스트를 입력받고 오름차순 정렬한다. 가장 앞과 가장 뒤 원소를 곱..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oxMX8/btrLLXpZAHD/3BDJfcHLbpgF6WLqd76DeK/img.png)
👉 문제링크 4101번: 크냐? 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 두 정수가 주어진다. 두 수는 백만보다 작거나 같은 양의 정수이다. 입력의 마지막 줄에는 0이 www.acmicpc.net 🔸 문제 분석 🔸 입력받은 두 수 중에 첫 번째 수가 크면 "Yes", 아니면 "No"를 출력한다. 0 0이 입력될 때까지 반복한다. 🔸 코드 🔸 x, y = map(int,input().split()) while x != 0 and y!= 0: if x > y: print("Yes") else: print("No") x, y = map(int,input().split()) 🔸 코드 해석 🔸 0 0이 입력될 때까지 while 반복으로 입력받고 계산한다. 🔸..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ZRBnD/btrLD0AlcFD/EPJgET8cyO4v9GliNCNUtK/img.png)
👉 문제링크 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 🔸 문제 분석 🔸 입력받은 n을 제곱수의 합으로 표현할 때 최소한의 경우의 수를 출력한다. dp 와 브루트 포스 풀이 두 가지가 가능하다. dp dp[n] 리스트는 n을 만드는데 들어가는 '제곱수 합 경우의 수의 최소값'을 저장한다. dp[0] = 0, dp[1] = 1 로 초기화한다. dp[n]을 구할 때, 1부터 j의 제곱수(j**2)가 i보다 커질때까지 반복하며 최소값을 찾는다. min_v : i에서 j**2를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dDPLT5/btrLuyrtoXL/k2QF8aD8DdOd3Gumx0RxxK/img.png)
👉 문제링크 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 🔸 문제 분석 🔸 1x2, 2x1, 2x2 타일을 채우는 경우의 수를 출력한다. 점화식은 dp[n] = dp[n-1] + dp[n-2]*2 이다. 🔸 코드 🔸 arr = [1,1] for _ in range(int(input())-1): arr.append((arr[-1]+arr[-2]*2)%10007) print(arr[-1]) 🔸 코드 해석 🔸 리스트의 초기값을 1,1로 두고 점화식을 적용한다. 문제 조건에 따라 10007의 나머지로 계산한다. 🔸 end 🔸 2xn타일 1을 풀..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ORCTJ/btrLouPZIij/OkvxEWqDyiW3klmOv5j8Fk/img.png)
👉 문제링크 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 🔸 문제 분석 🔸 타일을 채울 수 있는 경우의 수를 출력한다. 점화식은 dp[n] = dp[n-1] + dp[n-2] 이다. 🔸 코드 🔸 n = int(input()) dp = [1,1] for i in range(1,n): dp.append((dp[-1]+dp[-2])%10007) print(dp[n]) 🔸 코드 해석 🔸 dp 리스트의 인덱스 0, 1은 1로 초기화 한다. 점화식에 따라 입력 값(n) 만큼 반복하며 dp리스트를 채운다. 값을 채울 때 문제 조건에 따라 1..