Algorithm 179

[Python] 볼링공 고르기

문제 두 사람은 서로 무게가 다른 볼링공을 고르려고 합니다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여됩니다 같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주합니다 볼링공의 무게는 1부터 M까지의 자연수 형태로 존재합니다 예를 들어 N이 5이고, M이 3이며, 각각의 무게가 차례대로 1, 3, 2, 3, 2일 때 각 공의 번호가 차례대로 1번부터 5번까지 부여됩니다. 이 때 두 사람이 고를 수 있는 볼링공 번호의 조합을 구하면 다음과 같습니다. (1번, 2번), (1번, 3번), (1번, 4번), (1번, 5번), (2번, 3번), (2번, 5번), (3번, 4번), (4번, 5번) 결과적으로 두 사람이 공을 고르는 경우의 수는 8가..

Algorithm/Greedy 2023.01.16

[Python] 만들 수 없는 금액

문제 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요 예를 들어, N = 5이고, 각 동전이 3원, 2원, 1원, 9원짜리 동전이라고 가정합시다 이 때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟 값은 8원입니다 입력 첫째 줄에는 동전의 개수를나타내는 양의 정수 N이 주어집니다 둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며, 각 자연수는 공백으로 구분합니다. 이 때 각 화폐의 단위는 1,000,000 이하의 자연수입니다 출력 첫째 줄에 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력합니다 문제 풀이 동전의 금액을 오름차순으로 정렬 오름차순으로 정렬 한 동전들을 더해가면서 만들 수 있는 값(target) 업데이트 만약..

Algorithm/Greedy 2023.01.16

[Python] 문자열 뒤집기

문제 0과 1로만 이루어진 문자열 S를 가지고 있습니다. 이 문자열 S에 있는 모든 숫자를 전부 같게 만드려 합니다 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것입니다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미합니다 예를 들어 S = 0001100일 때는 다음과 같습니다 1. 전체를 뒤집으면 1110011이 됩니다 2. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 두 번 만에 모두 같은 숫자로 만들 수 있습니다 하지만 처음부터 4번쨰 문자부터 5번쨰 문자까지 뒤집으면 한번에 0000000이 되어서 1번만에 같은 숫자로 만들 수 있습니다 문자열 S가 주어졌을 때 문자열을 뒤집는 최소 행동 횟수를 구하시오 입력 첫째 줄에 0과 1로만 이루어진 문..

Algorithm/Greedy 2023.01.10

[Python] 곱하기 혹은 더하기

문제 각 자리가 숫자 0부터 9로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인 하여 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수 를 구하는 프로그램 작성 +보다 x를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정한다 입력 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어집니다. (1

Algorithm/Greedy 2023.01.09

[Python] 1이 될 때까지(그리디)

문제 어떠한 수 N이 1이 될 때 까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행한다 단 두 번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있다. 입력 첫째 줄에 N (2 1: n -= 1 cnt += 1 print(cnt) 문제풀이 3 N을 K로 나누어 떨어지는 값으로 만들기 n - target 값 만큼 연산 횟수를 카운트 N이 K보다 작은 경우 나눌 수 없는 경우이므로 while문 탈출 N을 K로 나누고 연산 횟수 카운트 N이 K보다 작아 반복문 탈출한 경우 N - 1 값을 연산횟수에 더하기 연산횟수 출력 코드 n, k = map(int,input().split()) cnt = 0 while True: # N을 K로 나누어 떨어지는 값 만들기 target = (n // k) * k c..

Algorithm/Greedy 2023.01.06

[Python] 숫자 카드 게임(그리디)

문제 숫자가 쓰인 카드들이 N * M으로 놓여있다, N은 행, M은 열의 개수이다 뽑고자 하는 카드가 포함되어 있는 행을 선택한다 그 다음 선택 된 행에 포함되어 있는 카드들 중 가장 숫자가 낮은 카드를 뽑는다 처음에 카드를 골라 낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑도록 한다. 입력 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 주어진다 ( 1

Algorithm/Greedy 2023.01.06