반응형

그리디 10

[BOJ] 1339 - 단어 수학

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net #include #include #include #include using namespace std; bool desc(int a, int b){ return a > b; } int alpha[26] = {0, }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector v; for(int i = 0..

알고리즘/BOJ 2022.07.01

[BOJ] 1715 - 카드 정렬하기

https://www.acmicpc.net/problem/1715 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net import sys import heapq n = int(input()) heap = [] for i in range(n): data = int(sys.stdin.readline()) heapq.heappush(heap, data) result = 0 while len(heap) != 1: one = heapq.heappop(heap) two = heapq.heappop(heap) ..

알고리즘/BOJ 2022.01.26

[BOJ] 1439 - 뒤집기

https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net import sys data = sys.stdin.readline().rstrip() count0 = 0 count1 = 0 if data[0] == '1': count0 += 1 else: count1 += 1 for i in range(len(data) - 1): if data[i] != data[i+1]: if data[i+1] == '1': count0 += 1 else: count1 +=..

알고리즘/BOJ 2022.01.04

[이취코테] 숫자 카드 게임

문제 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 1. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 3. 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야한다. 카드들이 N x M 형태로 놓여 있을 때, 게임의 룰에 맞게 카드를 뽑는 프로그램을 만드시오. 입력 조건: 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 각각 자연수로 주어진다. (1

[이취코테] 큰 수의 법칙

문제 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번 초과하여 더해질 수 없다. (서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다.) 배열의 크기 N, 숫자가 더해지는 횟수 M, 그리고 K가 주어질 때 동빈이의 큰 수의 법칙에 따른 결과를 출력하시오. 입력 조건: 첫째 줄에 N(2

[이취코테] 모험가 길드

https://youtu.be/2zjoKjt97vQ 이 문제의 해설 영상이다. 문제 한 마을에 모험가가 N명 있다. 모험가 길드에서는 N명의 모험가를 대상으로 '공포도'를 측정했는데, '공포도'가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어진다. 모험가 길드장인 동빈이는 모험가 그룹을 안전하게 구성하고자 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여할 수 있도록 규정했다. 동빈이에게 N명의 모험가에 대한 정보가 주어졌을 때, 만들 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하시오. (단, 모든 모험가를 특정한 그룹에 넣을 필요는 없다.) 입력 조건: 첫째 줄에 모험가의 수 N이 주어진다. (1

[이취코테] 곱하기 혹은 더하기

https://www.youtube.com/watch?v=2zjoKjt97vQ 이 문제의 해설 영상이다. 문제 각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 만들 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. (단, + 보다 x를 먼저 계산하는 일반적인 방식과 달리, 모든 연산은 왼쪽부터 차례대로 이루어진다고 가정) 입력 조건: 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다.(1 1): result *= int(s[i]) else: result += int(s[i]) print(result) 일반적으로는 두 수에 대해 연산을 할 때, 대부분 곱하기가 더하기보다 값을 더 크게 만..

[이취코테] 1이 될 때까지

https://youtu.be/2zjoKjt97vQ 이 문제의 해설 영상이다. 문제 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있다. 1. N에서 1을 뺀다. 2. N을 K로 나눈다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하시오. 입력 조건: 첫째 줄에 N(2

[BOJ] 11047 - 동전 0

https://www.acmicpc.net/problem/11047 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 = map(int, input().split()) array = list() num = 0 for i in range(n): array.append(int(input())) for i in reversed(array): coin = i num += k // coin k %= coin print(num) 이 문제는 그리디 알..

알고리즘/BOJ 2021.12.31
반응형