목록Computer Science (244)
DHistory
문제 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 풀이 """ 음이 아닌 정수 N (0, 양의 정수) 서로 다른 정수 (M >= 1)개의 팩토리얼 합으로 나타낼 수 있는지 알아보는 프로그램 -> 0! = 1 """ import itertools n = int(input()) def solution(n): factories = [1] for i in range(1, 21): factories.append(factories[i - 1] * i) for i in range(1, len(fact..
문제 14655번: 욱제는 도박쟁이야!! 첫째 줄에 동전의 수 N이 주어진다. (1 ≤ N ≤ 10,000) 둘째 줄에 욱제의 첫 번째 라운드의 N개 동전의 배열이 주어진다. 셋째 줄에 욱제의 두 번째 라운드의 N개 동전의 배열이 주어진다. 동전에 적 www.acmicpc.net 풀이 """ 동전의 양면에는 절대값이 같고 부호가 다른 정수가 한 면에 하나씩 쓰여있다. (동전끼리는 쓰인 수의 절댓값이 다를 수 있다. = 같을 수 있다.) 2번의 라운드 = 같은 동전으로 진행 N개의 동전 = 섞은 후 일렬로 배열 (앞뒤 방향 바뀔 수 있음.) 1라운드 - 최대가 되도록 뒤집기 2라운드 - 최소가 되도록 뒤집기 연속한 3개의 동전만 뒤집기 (동전 끝의 동전만 뒤집는 경우 가능 1개, 2개) => 동전을 뒤집는..
문제 2891번: 카약과 강풍 첫째 줄에 팀의 수 N, 카약이 손상된 팀의 수 S, 카약을 하나 더 가져온 팀의 수 R이 주어진다. (2 ≤ N ≤ 10, 1 ≤ S, R ≤ N) 둘째 줄에는 카약이 손상된 팀의 번호가 주어진다. 팀 번호는 중복되지 않 www.acmicpc.net 풀이 """ 체육복 문제와 동일 """ n, s, r = map(int, input().split()) damaged = list(map(int, input().split()))[:s] spares = list(map(int, input().split()))[:r] def solution(n, damaged, spares): teams = ['O'] * n # 카약이 손상된 팀 for value in damaged: teams..
문제 15720번: 카우버거 첫째 줄에는 주문한 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D가 공백을 사이에 두고 순서대로 주어진다. (1 ≤ B, C, D ≤ 1,000) 둘째 줄에는 각 버거의 가격이 공백을 사이에 두고 주어진 www.acmicpc.net 풀이 """ B, C, D가 각각 존재하는 경우 10% 할인 B: 버거의 개수 C: 사이드 메뉴 개수 D: 음료의 개수 최저가 출력 === example === 3 3 2 2000 3000 2500 800 1300 1000 500 1000 12100 11170 3000 + 1300 + 1000 => 5300 * 0.9 = 4770 2500 + 1000 + 500 => 4000 * 0.9 = 3600 2000 + 800 = 2800 ""..
문제 16208번: 귀찮음 현우는 무슨 이유에선지 길이 a1, ..., an의, 총 n개의 쇠막대가 필요해졌다. 하지만 그가 가진 것은 길이 a1+...+an의 하나의 쇠막대뿐이었다. 현우는 이 막대를 직접 잘라서 원래 필요하던 n개의 쇠 www.acmicpc.net 풀이 """ n개의 쇠막대 a1 + a2 + a3 + ... + an 하나의 쇠막대 x+y인 막대를 길이 x,y인 두 개의 막대로 자를 때에는 두 막대의 길이의 곱인 xy의 비용이 든다. 최소 비용은? === example === 4 3 5 4 2 => 총 14 5 9 = 45 4 5 = 20 3 2 = 6 """ n = int(input()) rods = list(map(int, input().split()))[:n] def solutio..
문제 11256번: 사탕 당신은 사탕 공장의 주인이다. 날마다, 당신은 J개의 사탕을 가게에 보내기 위해 상자에 포장해야 한다. 당신은 크기가 다른 상자 N개를 가지고 있다. 당신은 편리를 위해 상자를 최소한으로 쓰 www.acmicpc.net 풀이 """ J개의 사탕 상자에 포장 크기가 다른 상자 N개 / 최소한의 상자만 사용 (박스를 다 채울 필요는 없다.) T: 테스트 케이스 개수 j: 사탕의 개수 n: 상자의 개수 r: 세로 길이, c: 가로 길이 """ t = int(input()) def solution(j, boxes): answer = 0 boxes = sorted([a * b for a, b in boxes], reverse=True) total = 0 for box in boxes: i..
문제 1817번: 짐 챙기는 숌 첫째 줄에 책의 개수 N과 박스에 넣을 수 있는 최대 무게 M이 주어진다. N은 0보다 크거나 같고 50보다 작거나 같은 정수이고, M은 1,000보다 작거나 같은 자연수이다. N이 0보다 큰 경우 둘째 줄에 책 www.acmicpc.net 풀이 """ 책은 차례대로 박스에 넣어야한다. n: 책의 개수 m: 박스에 넣을 수 있는 최대 무게 """ n, m = map(int, input().split()) weights = [] for _ in range(min(n, 1)): weights = list(map(int, input().split()))[:n] def solution(m, weights): if not len(weights): return 0 answer = 1..
문제 6550번: 부분 문자열 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다. www.acmicpc.net 풀이 UCPC와 동일한 문제 """ 문자열 s와 t s가 t의 부분 문자열인지 판단 부분문자열: t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우 """ import sys def solution(s, t): index = 0 for alpha in t: if s[index] == alpha: index += 1 if index == len(s): return 'Yes' return 'No' for line in sys.std..
문제 3135번: 라디오 첫 줄엔 정수 A와 B가 주어진다 (1 ≤ A, B B로 갈 때 눌러야 하는 가장 적은 버튼 수 === example === Input 100 15 => A, B 1 => N 15 => 즐겨찾기 주파수 채널 Output 15 주파수 단위는 신경쓰지 않아도 됨. """ a, b = map(int, input().split()) n = int(input()) boo..
문제 9237번: 이장님 초대 입력은 두 줄로 이루어져 있다. 첫째 줄에는 묘목의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 각 나무가 다 자라는데 며칠이 걸리는지를 나타낸 ti가 주어진다. (1 ≤ ti ≤ 1,000,000) www.acmicpc.net 풀이 """ n: 나무 묘목 하나를 심는데 걸리는 시간: 1일 Q: 각 묘목이 자라는데 며칠이 걸릴까? A: 마지막 나무가 자란 날 (가장 작은 값, 처음값: 1일 -> O일?) N: 묘목의 수 ti: 묘목이 자라는데 며칠이 걸리는 지 묘목이 자라는데 필요한 일 수: 4 3 3 2 각 묘목이 자라는데 필요한 일 수: 5 5 6 6 """ n = int(input()) seeds = list(map(int, input().split..