목록분류 전체보기 (112)
just inside
문제 링크https://www.acmicpc.net/problem/28702문제 설명FizzBuzz 문제는 i=1,2,⋯𝑖=1,2,⋯ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다. i𝑖가 33의 배수이면서 55의 배수이면 “FizzBuzz”를 출력합니다. i𝑖가 33의 배수이지만 55의 배수가 아니면 “Fizz”를 출력합니다. i𝑖가 33의 배수가 아니지만 55의 배수이면 “Buzz”를 출력합니다. i𝑖가 33의 배수도 아니고 55의 배수도 아닌 경우 i𝑖를 그대로 출력합니다.FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요? 입력 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 ..
문제 링크https://www.acmicpc.net/problem/11050문제 설명자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 구하는 프로그램을 작성하시오. 입력첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) 출력\(\binom{N}{K}\)를 출력한다.제출 코드import sysinput = sys.stdin.readlinen, k = map(int, input().split())def factorial(n): if n == 0: return 1 return n * factorial(n-1) print(factorial(n) // (factorial(k) * fa..
문제 링크https://www.acmicpc.net/problem/10989문제 설명 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 제출 코드import sysinput = sys.stdin.readlinen = int(input().rstrip())nums = [0 for _ in range(10001)]for _ in range(n): num = int(input().rstrip()) nums[num] +..
문제 링크https://www.acmicpc.net/problem/2869문제 설명땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 제출 코드import sysinput = sys.stdin.readlinea, b, v = map(int, input().split())cnt = (v - a) /..
문제 링크https://www.acmicpc.net/problem/2775문제 설명평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다. 입력 첫 번째 줄에 Test cas..
복잡한 문제를 해결하기 위해 사용되는 최적화 기법큰 문제를 여러 작은 부분 문제로 나누어 해결하고, 그 결과를 저장하여 같은 부분 문제를 반복적으로 해결하지 않도록 하는 방식최적화 문제나 점화식 기반 문제에서 사용됨 주요 개념부분 문제의 중복문제 해결 과정에서 동일한 부분 문제가 반복적으로 나타남ex) 피보나치 수열 - 계산 시 동일한 피보나치 수가 여러 번 계산최적 부분 구조문제의 최적 해결 방법이 부분 문제들의 최적 해결 방법으로 구성되는 경우ex) 최단 경로 문제 - 전체 경로의 최적 경로는 부분 경로의 최적 경로로 구성메모이제이션 (Memoization) 또는 타뷸레이션 (Tabulating)메모이제이션 : 재귀적 접근에서 이미 계산된 부분 문제의 결과를 저장하여 중복 계산 방지타뷸레이션 : 반복..
문제 링크https://www.acmicpc.net/problem/2609문제 설명 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 제출 코드import sysinput = sys.stdin.readlinedef gcd(a, b): while b != 0: a, b = b, a % b return a def lcd(a, b): return abs(a*b) // gcd(a, b)a, b = map..
유클리드 호제법 (Euclidean Algorithm) / 최대공약수 계산두 정수의 최대공약수 (GCD, Greatest Common Divisor)를 효율적으로 계산하는 알고리즘두 수의 최대공약수가 두 수의 차이의 최대공약수와 같다는 것원리두 정수 $a$와 $b$ $(a>b)$의 최대공약수를 구하기 위해 다음 과정을 반복$a$를 $b$로 나눈 나머지 $r$을 구한다.$a$를 $b$로, $b$를 $r$로 대체한다.$r$이 0이 될 때까지 이 과정을 반복한다.$r$이 0이 되었을 때, $b$가 $a$와 $b$의 최대공약수$$ GCD(a,b)=GCD(b,a\bmod b)$$def gcd(a,b): while b != 0: a, b = b, a % b return a시간복잡도는 $O(log\ min(a..