728x90
반응형

그리디 24

[파이썬] BOJ_2839(설탕 배달)

문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 해설 이 문제는 설탕을 5의 배수로 만들 수 있느냐 없느냐를 가지고 접근하면 된다. 5의 배수가 아니라면 3씩 빼줘서 5의 배수로 맞추면 되는데 설탕이 5의 배수로 맞춰지지 않고 음수가 되어버리면 5와 3으로 나눠 떨어지지 않는 것이기 때문에 -1을 출력해주면 된다. 코드 -파이썬 #백준 2839(설탕 배달) sugar = int(input()) #설탕 무게 bag = 0 #봉지 개수 while sug..

알고리즘/백준 2023.06.28

[파이썬] BOJ_2810(컵홀더)

문제 https://www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 해설 SLLLLSSLL을 나눠서 보면 S / LL / LL / S / S / LL로 나눌 수 있다. S는 한 좌석에 컵홀더 1개, L은 두 좌석에 컵홀더 1개. 그렇다면 * / S* / LL* / LL* / S* / S* / LL* 로 표현할 수 있다. 결국 S는 1개당 컵홀더 1개 더해주면 되고, L은 L//2개당 컵홀더 1개를 더해주면 된다. 가장 왼쪽의 첫번째 컵홀더도 빼먹으면 안된다. 총 컵홀더의 개수를 구하고 나면 컵홀더와 사람 수 둘 중 작은 값을 출력해주면 된다. 문제에서 물어..

알고리즘/백준 2023.06.09

[파이썬] BOJ_1449(수리공 항승)

문제 www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 해설 물이 새는 곳을 막기 위해서는 앞뒤로 총 1만큼의 간격이 더 필요하다. 시작위치보다 물 새는 위치가 더 뒤에 있을 때 막을 수 있다. 일단 구멍 하나를 막으면, 테이프 길이 - 1(앞뒤 0.5) 위치에 있는 구멍까지 다 막을 수 있다. 그렇기 때문에 시작 위치만 마지막으로 막은 구멍으로 옮겨주면 간단하게 해결할 수 있다. 코드 -파이썬 #백준 1449(수리공 항승) n, l = map..

알고리즘/백준 2021.02.25

[파이썬] BOJ_13305(주유소)

문제 www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 해설 첫 도시에서는 가격에 상관없이 무조건 다음 도시로 이동할 수 있는 양의 기름이 필요하다. 두번째 도시부터는 현재 도시의 주유소 가격이 최소인지를 따지는 것이 필요하다. 그러나 첫 도시부터 가격이 최소인지를 따지게 만들면 코드를 더 간결하게 쓸 수 있다. minOil이라는 최소 가격을 넣을 변수를 선언할 때, 문제에 제시되어 있는 리터당 가격의 최댓값을 넣어두면 모든 도시에 같은 코드를 ..

알고리즘/백준 2021.02.24

[파이썬] BOJ_2720(세탁소 사장 동혁)

문제 www.acmicpc.net/problem/2720 2720번: 세탁소 사장 동혁 각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다. www.acmicpc.net 해설 각각의 동전의 개수를 최소로 하기 위해선 거스름돈 액수를 각 동전으로 나눈 몫을 개수로 하면 된다. 남은 거스름돈은 또 남은 동전들로 나눠주면 된다. 코드 -파이썬 #백준 2720(세탁소 사장 동혁) coin = [25, 10, 5, 1] t = int(input()) #테스트 케이스 개수 for _ in range(t): case = int(input()) #거스름돈 res = [] for i in coin: res.append(case // i) case = case..

알고리즘/백준 2021.02.23

[파이썬, 자바] BOJ_1343(폴리오미노)

문제 www.acmicpc.net/problem/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net 해설 XXXX는 AAAA로 XX는 BB로 변경하는 문제이니 문자를 교체해주는 replace() 함수를 사용하면 된다. 교체를 해준 후에도 X가 남아있다면 -1이 답이 되는 것이고, 남아있지 않다면 그대로 바꾼 문자를 출력해주면 된다. 코드 -파이썬 #백준 1343(폴리오미노) board = input() #보드판 board = board.replace('XXXX', 'AAAA') board = board.replace('XX', 'BB') if board.count('X') != 0: print(-1) els..

알고리즘/백준 2021.02.19

[파이썬] BOJ_15903(카드 합체 놀이)

문제 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 해설 이 문제는 다음과 같은 2가지 과정을 통해 카드 합체를 하는 문제이다. x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. (x ≠ y) 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어 쓴다. 위와 같은 과정을 m번 거쳤을 때 모든 카드의 합이 최소가 되게 하는 것이 목표이므로, 매번 고르는 x번 카드와 y번 카드는 ..

알고리즘/백준 2021.02.17

[파이썬] BOJ_11399(ATM)

문제 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 해설 이 문제는 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구해야 하는 문제이다. 앞 사람의 시간이 계속해서 더해져 나가기 때문에 앞 사람이 가장 적은 시간만을 사용해야 전체 시간의 합이 최소가 될 것이다. 푸는 방법은 다양하겠지만, 나는 오름차순 정렬을 이용해 풀었다. 정렬 후에는 이중 for문을 이용한다면 쉽게 풀 수 있다. 코드 -파이썬 #백준 11399(ATM) n = int(input()) #사람 수..

알고리즘/백준 2021.02.16

[파이썬, 자바] BOJ_20363(당근 키우기)

문제 https://www.acmicpc.net/problem/20363 20363번: 당근 키우기 첫째 줄에 X와 Y (0 ≤ X, Y ≤ 109)를 의미하는 정수가 공백으로 구분되어 주어진다. www.acmicpc.net 해설 이 문제는 우선 자기가 예시를 만들어서 풀어보는 것이 좋다. 예시를 직접 손으로 풀다보면, 한 가지 풀이 방법에 대한 의문이 생긴다. 그리고 그 의문을 코드로 옮겨보면 풀리는 문제이다. 위의 예시들을 직접 손으로 풀어봤을 때, 온기, 수분의 최소 합을 계산하면 각각 답이 빨간색 글씨 처럼 나온다. 이 것들을 살펴보면, 온기 + 수분 + (min(온기, 수분) / 10) 이 답이 된다는 것을 알 수 있다. 결국 이 계산식 대로만 풀면 되고, 백준에서 제시한 2번째 예시를 실행해보..

알고리즘/백준 2021.02.15

[파이썬] BOJ_1758(알바생 강호)

문제 https://www.acmicpc.net/problem/1758 1758번: 알바생 강호 첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같은 자연수 www.acmicpc.net 해설 팁을 최대한으로 받기 위해서는, 팁을 가장 많이 내는 손님들부터 우선순위로 배치하면 된다. 그러고 나선 문제에 적혀있는대로 원래 주려고 생각했던 돈 - (받은 등수 - 1) 에 따라 계산하면 된다. 코드 -파이썬 #백준 1758(알바생 강호) n = int(input()) #사람 수 tip = [] sum = 0 for i in range(n): tip.insert(..

알고리즘/백준 2021.02.12
728x90
반응형