Algorithm/Greedy 15

[Python] 백준 9082번 지뢰찾기

문제https://www.acmicpc.net/problem/9082입력입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 첫 줄에 배열의 크기 N(1 ≤ N ≤ 100)이 주어지고, 그 다음 두 줄에 걸쳐서 배열이 주어진다. 첫 줄에는 항상 숫자만이 나타나며 이 숫자들 사이에 공백은 없으며, 둘째 줄에 주어지는 입력들 사이에도 공백은 없다. 그리고 이 숫자들은 올바른 값만이 입력으로 들어온다(지뢰의 위치에 대해 불가능한 값은 입력으로 주지 않는다).출력각 테스트 케이스에 대해서 주어진 배열에 있는 모든 지뢰의 수를 한 줄에 하나씩 출력한다. 지뢰의 수가 여럿이 될 수 있으면 가능한 지뢰의 수 중 최댓값을 출력한다.입력 예제2511122####*523321##..

Algorithm/Greedy 2024.10.17

[Python] 프로그래머스 구명보트

문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이 (투포인터 + 그리디)최대 두 명의 사람을 한 보트에 태워보낼 수 있으므로 가장 가벼운 사람 + 가장 무거운 사람을 한 보트에 태워 보내야한다.가장 가벼운 사람과 무거운 사람의 무게를 합한 값이 limit와 같거나 작으면 두 명을 한 보트에 태워 보낼 수 있는 것이므로 양쪽의 포인터를 옮긴다.합한 값이 limit보다 크다면 한 명만 보트에 태워 보낼 수 있으므로 가장 무거운 사람만 먼저 보낸 후 end 포인터만 옮긴다.각 연산 시 보트에 사람을 태워보냈으므로 answer값도 1씩 증가시킨다.코드d..

Algorithm/Greedy 2024.07.16

[Python] 백준 1138번 한 줄로 서기

문제 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net 입력 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다. 출력 첫째 줄에 줄을 선 순서대로 키를 출력한다. 입력 예제 4 2 1 1 0 5 0 0 0 0 0 출력 예제 4 2 1 3 1 2 3 4 5 문제 풀이 이중 for문을 돌리면서, arr..

Algorithm/Greedy 2023.06.16

[Python] SWEA 1860번 진기의 최고급 붕어빵

문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 손님을 온 순서대로 오름차순 정렬한다. 손님이 온 시각까지 만들어진 붕어빵 개수는 (도착시간 // m) * k이다. 붕어빵을 만드는 데 소요되는 시간(M)으로 나눈 몫의 횟수만큼 붕어빵을 만들 수 있고, m초에 k개를 만들 수 있으므로, 나눈 몫에 k를 곱한다. 그 후 인당 한 개씩 붕어빵을 구매하므로 (i + 1)값을 빼 주면, 현 시각 붕어빵을 구매하고 남은 총 개수를 구할 수 있다. 계산된 붕어빵의 개수는 array[i]초에 1개를 구매하고 난 후의 붕어빵 개수이므로, 빵의 값이 0이아닌 음수일 때 구매할 수 없는 상태로 보고 결과를 impo..

Algorithm/Greedy 2023.05.12

[Python] 백준 16953번 A -> B

문제 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 입력 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. 출력 A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다. 입력 예제 2 162 4 42 출력 예제 5 -1 문제 풀이 Top-down 방식으로 접근하는게 연산하기 더 편할 것 같아 Top-down으로 접근했다. 2로 나누거나, 뒷자리에서 1을 빼는 두 가지 연산 중 뒷자리가 1인 경우는 2로 나누어 떨어지지 않고, 2의 배수인 경우 뒷자리의 수가 1이 아니므로, 뒷자리 수가 1인 경우 1을 빼고, 2의 배수인 경우 2로 나눈 후 연산 횟수를 카운트 2의 배..

Algorithm/Greedy 2023.03.24

[Python] 백준 10610번 30

문제 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 입력 N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다. 출력 미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라. 입력 예제 30 102 출력 예제 30 210 문제 풀이 30의 배수가 되려면 아래 두 조건을 무조건 만족해야한다. 모든 자리 값의 합이 3의 배수. 3이 아닌 30의 배수이므로 0이 있어야한다. 위 조건에 맞게 구현하면 되는데 30의 배수 중 가장 큰 수..

Algorithm/Greedy 2023.03.24

[Python] 백준 1946번 신입사원

문제 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 입력 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성적, 면접 성적의 순위가 공백을 사이에 두고 한 줄에 주어진다. 두 성적 순위는 모두 1위부터 N위까지 동석차 없이 결정된다고 가정한다. 출력 각 테스트 케이스에 대해서 진영 주식회사가 선발할 수 있는 신입사원의 최대 ..

Algorithm/Greedy 2023.03.20

[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