그리디 알고리즘 31

[Python] 백준 풀기 2720 - 세탁소 사장 동혁

파이썬 백준 2720번 브론즈 3 https://www.acmicpc.net/problem/2720 2720번: 세탁소 사장 동혁 각 테스트케이스에 대해 필요한 쿼터의 개수, 다임의 개수, 니켈의 개수, 페니의 개수를 공백으로 구분하여 출력한다. www.acmicpc.net 문제 보기 분류: 수학, 그리디 알고리즘, 사칙연산 문제 풀기 각각의 동전에 대해 몫과 나머지를 구하는 방법으로 해결한다. 주어진 입력값인 거스름돈에 대해 제일 큰 숫자인 25센트부터 몫을 구하고 그 나머지를 다음 연산 거스름돈으로 보낸다. 이 과정을 10센트, 5센트 그리고 1센트에 반복 적용하여 각각의 계산 결과 몫이 나타내는 동전의 개수를 출력한다. 코드 보기 import sys inputdata = sys.stdin.readl..

공부하기/백준 2022.12.23

[Python] 백준 풀기 1439 - 뒤집기

파이썬 백준 1439번 실버 5 https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 문제 보기 분류: 문자열, 그리디 알고리즘 문제 풀기 0 과 1 조합의 숫자들을 리스트에 각각 입력받는다. 숫자들의 맨 앞과 맨 끝의 수가 같은지 확인을 한다. 만약, 같다면 그 반대되는 수를 기준으로 하여 check 에 저장해 둔다. 이때, count 는 0 으로 시작. 숫자들의 맨 앞과 맨 끝의 수가 다르다면, 첫 수와 반대되는 수를 check 에 저장한다. 이..

공부하기/백준 2022.12.21

[Python] 백준 풀기 11497 - 통나무 건너뛰기

파이썬 백준 11497번 실버 1 https://www.acmicpc.net/problem/11497 11497번: 통나무 건너뛰기 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 www.acmicpc.net 문제 보기 분류: 그리디 알고리즘, 정렬 문제 풀기 아이디어는 위와 같다. 오름차순 또는 내림차순 정렬된 리스트에서 가장 작은 수를 기준으로 하여 왼쪽과 오른쪽을 번갈아가며 순차적으로 숫자를 채워나간다. 작성된 코드는 주어진 통나무 리스트를 오름차순 정렬한다. 리스트의 가장 작은 값을 기준으로 잡고 deque() 를 이용하여 오른쪽 append(), 왼쪽 app..

공부하기/백준 2022.12.16

[Python] 백준 풀기 1080 - 행렬

파이썬 백준 1080번 실버 1 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 문제 보기 분류: 그리디 알고리즘 문제 풀기 처음에 문제를 정확하게 읽지 않아 A 와 B 에서 같지 않은 부분만 3x3 으로 변경이 가능하다고 생각하여 최소 횟수로로 변경 가능한 위치를 찾느라 좀 헤메었다. 제시된 문제의 연산 규칙에 따라 3x3 부분의 1열1행에 위치한 원소가 다르면 무조건 3x3 을 뒤집으면 된다. 다 뒤집어 봤는데도 같지 않으면 -1 이고, 뒤집을 수 없어도..

공부하기/백준 2022.12.11

[Python] 백준 풀기 2217 - 로프

파이썬 백준 2217번 실버 4 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 문제 보기 분류: 수학, 그리디 알고리즘, 정렬 문제 풀기 최대 중량을 들기 위해서는 단일 로프가 허용하는 중량이 클수록 그리고 중량을 분산할 로프가 많을수록 유리하다. 따라서 임의의 순서로 주어지는 로프의 중량 정보를 내림차순 정렬을 하고 가장 허용 중량이 작은 로프부터 하나씩 제거해 가며 최댓값을 찾는다. 내림차순 정렬된 로프 리스트에서 맨 오른쪽 데이..

공부하기/백준 2022.12.10

[Python] 백준 풀기 1789 - 수들의 합

파이썬 백준 1789번 실버 5 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 문제 보기 분류: 수학, 그리디 알고리즘 문제 풀기 가장 많은 N 개의 자연수를 얻기 위해서 가장 작은 1 부터 2, 3, ,,, 순서로 합을 시켜준다. 이때 S 를 넘게 되면 그 이전의 순차 자연수는 마지막 S 를 맞추기 위해 정확한 값으로 한 번 들어간다. 최대 N 을 위해 이런 식으로 진행된다는 의미이다. 코드 작성은 S 에서 1, 2, 3, ,,, 순차적으로 자연수를 빼주다가 S 가 음수가 되는 시점에 반복문을 빠져나오고 그때의 N 의 개수를 출력하는 식으로 작성하였다. 코드..

공부하기/백준 2022.12.09

[Python] 백준 풀기 2212 - 센서

파이썬 백준 2212번 골드 5 https://www.acmicpc.net/problem/2212 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 문제 보기 분류: 그리디 알고리즘, 정렬 문제 풀기 예제 입력 1 번에 대한 경우를 그림으로 나타내면 위와 같다. 집중국이 커버칠 수 있는 최소한의 거리를 찾으면 가장 넓은 구간 3 을 제외하고 2, 1+2 를 선택하여 최솟값을 이루는 집중국을 위치시킬 수 있다. 임의로 주어진 센서의 순서를 오름차순으로 정렬을 하고, 그 숫자(센서) 간의 ..

공부하기/백준 2022.12.08

[Python] 백준 풀기 12904 - A와 B

파이썬 백준 12904번 골드 5 https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 문제 보기 분류: 구현, 문자열, 그리디 알고리즘 문제 풀기 역으로 T 에서 S 로 변경이 가능한지를 확인한다. 이 문제로 주어진 문자열을 다루는 것에 대해 일부 학습이 되었다. 맨 뒷 문자 확인, 맨 뒷 문자 제거, 문자 전체 뒤집기. while loop 를 실행하면서 같은 T 와 S 가 같아질 때까지 반복을 하여 조건을 만..

공부하기/백준 2022.12.07

[Python] 백준 풀기 16953 - A → B

파이썬 백준 16953번 실버2 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제 보기 분류: 그리디 알고리즘, 그래프 탐색, 너비 우선 탐색 문제 풀기 A 에서 B 로 가지 않고 B 에서 A 로 가능한지를 바라보았다. while 을 통해 B 가 짝수일 때는 2 로 나누고, 맨 뒷자리 1 이 있을 때 1 을 제거하여 답을 찾을 때까지 반복한다. 함수 fnConversion() 에 적용된 조건은 다음과 같다. 1. 제일 먼저 B 와 A 가 같은지 비교하여 결과를 내보내고 while 을 멈출 수 있도록 한다. 2. 변환이 불가능한 경우에 대한 조건으로 B 가 A 보다 ..

공부하기/백준 2022.12.06

[Python] 백준 풀기 1026 - 보물

파이썬 백준 1026번 실버4 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 문제 보기 분류: 수학, 그리디 알고리즘, 정렬 문제 풀기 문제의 의도가 좀 애매한 것 같다. B를 정렬하지 말라고 했는데 정작 결과를 도출해야 하는 요소는 주어진 계산식으로 만들어질 수 있는 최솟값이다. 따라서, S = A[0] × B[0] + ... + A[N-1] × B[N-1] 에서 B 의 배열은 마음속에 고정해 두고, A 와 B 가 짝을 이룰 수 있는..

공부하기/백준 2022.12.05