목록Computer Science/Algorithm (244)
DHistory
문제 2865번: 나는 위대한 슈퍼스타K 첫째 줄에 N, M, K가 주어진다. (1 ≤ M ≤ 100, 1 ≤ K ≤ N ≤ 100) 다음 M개의 줄은 각 장르에 대한 참가자의 능력이 주어진다. 이 줄에는 N개의 (i, s)쌍이 주어진다. 여기서 i는 참가자의 번호, s는 그 www.acmicpc.net 풀이 """ n: 참가자 수 m: 음악 장르 심사위원은 각 장르에 대한 능력을 점수로 매긴다. (실수) 총 K명 본선 진출 각 참가자는 단 하나의 장르만 부를 수 있다. - 한 사람이 여러 장르를 부를 수 없지만 여러 사람이 같은 장르를 부를 수 있다. 능력의 합이 최대가 되도록 참가자와 장르를 선택하는 프로그램을 작성하시오. === example === 3 2 2 2 3.0 1 0.2 3 0.1 3 1..
문제 25379번: 피하자 음이 아닌 정수로 이루어진 길이 N의 배열 A = [A1, A2, · · · , AN]가 있다. 배열 A에서 인접한 두 수를 교환하는 시행을 원하는 만큼 할 수 있다. 이 때, 홀수와 짝수가 인접한 경우가 최대 1번 등장 www.acmicpc.net 풀이 실제로 바꿔가며 풀이 """ A: 음이 아닌 정수 배열 인접한 두 수를 교환하는 시행을 원하는 만큼 가능 홀수와 짝수가 인접한 경우 최대 1번 등장하도록 하는 시행의 최소 횟수는? === example === A = [4, 5, 1 ,0] = [4. 0, 5, 1]이 되는 경우 홀수와 짝수가 인접한 경우 최대 1번이 됨. """ import sys from copy import deepcopy n = int(sys.stdin...
문제 1246번: 온라인 판매 첫째 줄에 정수 N(1 ≤ N ≤ 1,000)과 M(1 ≤ M ≤ 1,000)이 입력된다. 둘째 줄부터 M+1번째 줄까지 i+1번째 줄에는 Pi(1 ≤ Pi ≤ 1,000,000)가 입력된다. www.acmicpc.net 풀이 """ N: 달갈 개수 M: 고객 수 i번째 고객은 각자 달걀을 Pi 가격 이하로 살 수 있다. - 고객은 하나의 달걀만 살 수 있음. 최대 수익을 올릴 수 있는 달걀의 가장 낮은 가격과 이 때의 총 수익은? === example === 5 4 2 8 10 7 7 21 7로 책정하는 경우 8 / 10 / 7 이하인 경우 달걀을 구매하는 인원이 있다. 즉 7이 이 때의 달걀의 가장 낮은 가격이고 총 수익은 21이다. """ import sys n, m ..
문제 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같 www.acmicpc.net 풀이 """ 8시가 될 때까지 대기 8시가 되는 순간 입구에서 커피를 받고 자리로 이동 "강호"는 커피를 하나씩 주는 역할 "손님"은 "강호"에게 팁을 줌 팁: 커피를 몇 번째 받는지에 따라 정해짐 (원래 주려고 했던 돈 - 받은 등수 + 1) 단, 음수인 경우 받을 수 없음 === example === 민호: 3원 재필: 2원 주현: 1원 민호 => 3 - 1 + 1 = 3 재필 => 2 - 2 + 1 = 1 주현 => 1 - 3 + 1..
문제 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오 www.acmicpc.net 풀이 """ 뉴클레오티드: A,T,G,C TAACTGCCGAT => AGCAT / GGAAT 1, 3번째가 다르므로 Hamming Distance = 2 s1 ~ sn까지 Hamming Distance의 합이 가장 작은 새 DNA s를 구하시오. => s1 ~ sn 중 각 자리마다 가장 많이 나온 알파벳을 찾으면 됨. === example === TATGATAC TAAGCTAC AAAGATCC TGAGATAC T..
문제 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net 풀이 """ 총 레벨: N 각 레벨을 클리어할 때마다 점수가 주어짐 점수는 항상 양수 플레이어 점수: 각 레벨을 클리어하면서 얻은 점수의 합 (Online raking) 레벨을 난이도 순으로 배치 - 특정 레벨의 점수를 감소하여 각 레벨을 클리어할 때 주는 점수가 증가하게 만들려고 함. - 점수를 내리는 것을 최소한으로 하는 방법? """ n = int(input()) scores = [] for _ in range(n): scores.append(int..
문제 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 풀이 """ 기타줄의 개수: N 브랜드 개수: M 각 줄은 6개 패키지 가격 / 낱개 가격 기타줄 N개를 사는데 최소한의 비용은? (N개를 오버해서 구매하지만 값이 싼 경우가 있을 수 있다.) """ n, m = map(int, input().split()) brands = [] for _ in range(m): package, ea = map(int, input().split()) brands.append((package, ea)) def soluti..
문제 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 풀이 """ 30의 배수가 되기 위한 조건 1. 모든 수의 합이 3의 배수일 것 2. 0이 포함되어 있어야할 것 """ n = int(input()) def solution(n): numbers = sorted(list(map(int, str(n))), reverse=True) if 0 in numbers and sum(numbers) % 3 == 0: return numbers return [-1] print(*solution(n), sep='') 채점 결과
문제 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 풀이 """ N개의 로프 - 로프는 들 수 있는 물체의 중량이 서로 다를 수 있다. - 여러 개의 로프를 병렬로 연결하는 경우 w/k로 고르게 들 수있다. 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량은? """ import sys n = int(sys.stdin.readline().rstrip()) rope = [] for _ in range(n): rope.append(int(sys.stdin.readline().rstrip())) de..
문제 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 풀이 """ 동전의 종류: N 적절히 사용해서 가치의 합을 K로 동전 개수의 최솟값은? """ n, k = map(int, input().split()) coins = [] for _ in range(n): coins.append(int(input())) def soltuion(coins, k): answer = 0 coins = sorted(coins, reverse=True) for coin..