그리디 알고리즘 31

[Java] 백준 풀기 6550 - 부분 문자열

자바 백준 6550번 실버 5 https://www.acmicpc.net/problem/6550 6550번: 부분 문자열 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다. www.acmicpc.net 문제 보기 분류: 그리디 알고리즘, 문자열 문제 풀기 문자열 s에서 순서대로 하나씩 문자를 선택하고, for loop로 문자열 t의 index를 하나씩 올려가며 같은 문자가 있는지 확인한다. 같은 문자가 있으면 sIndex를 하나씩 늘려가며, 최종 sIndex와 s 문자열 길이 s.length()가 같으면 "Yes"를 출력한다. 코드 보기 import java.util.S..

공부하기/백준 2023.08.18

[Java] 백준 풀기 11508 - 2+1 세일

자바 백준 11508번 실버 4 https://www.acmicpc.net/problem/11508 11508번: 2+1 세일 KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 나머지 두 www.acmicpc.net 문제 보기 분류: 정렬, 그리디 알고리즘 문제 풀기 세 개씩 묶었을때 가장 작은 가격을 제외하고 지불하는 규칙에서 전체 최소 비용을 구하기 위해서는 가격을 정렬하여 제외시킨다. 가격이 정렬된 상태에서 세 개씩 묶을 수 있으면 그 중 가장 작은 가격을 제외하고 누적 합한다. 세 개씩 묶여지지 않은 나머지 가격인 두 개 또는 한 개의 가격은 그대로 합한다. ..

공부하기/백준 2023.08.15

[Java] 백준 풀기 10610 - 30

자바 백준 10610번 실버 4 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 문제 보기 분류: 수학, 그리디 알고리즘, 문자열, 정렬, 정수론 문제 풀기 30의 배수가 가능한지 알아보기 위해서 주어진 숫자의 각 자리를 모두 합한 값이 3의 배수가 되는지 확인하고 0이 하나라도 존재하는지 확인한다. String 타입으로 입력 받은 숫자를 charAt() - '0' 방법을 이용하여 int 타입의 숫자로 변경한다. 0부터 9까지 각 숫자의 개수를 ..

공부하기/백준 2023.08.14

[Java] 백준 풀기 10162 - 전자레인지

자바 백준 10162번 브론즈 3 https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 www.acmicpc.net 문제 보기 분류: 수학, 구현, 그리디 알고리즘 문제 풀기 주어진 요리 시간에서 가장 긴 시간 5분 (300초) 버튼으로 나누어 그 횟수를 정하고 그 나머지 시간을 다음 버튼으로 넘겨준다. 다음 버튼인 1분 (60초) 버튼으로 나누어 그 횟수를 정하고 나머지 시간을 마지막 버튼으로 넘겨준다. 남은 10초 C버튼으로 나누어 그 횟수를 저장한다. A, B, ..

공부하기/백준 2023.08.13

[Java] 백준 풀기 15904 - UCPC는 무엇의 약자일까?

자바 백준 15904번 실버 5 https://www.acmicpc.net/problem/15904 15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 www.acmicpc.net 문제 보기 분류: 문자열, 그리디 알고리즘 문제 풀기 입력된 문자열에 대해 indexOf()를 사용하여 char 타입으로 대문자 `U`, `C`, `P`, `C`의 index를 찾는다. 각 indexOf()는 존재하는 문자를 찾으면 그 문자의 `index`를 반환하고 그렇지 않으면 `-1`을 반환한다. 첫 번째 문자의 탐색이 끝나면 그 ind..

공부하기/백준 2023.07.21

[Java] 백준 풀기 5585 - 거스름돈

자바 백준 5585번 브론즈 2 https://www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net 문제 보기 구현: 그리디 알고리즘 문제 풀기 잔돈의 종류중 가장 큰 값으로 나누어 그 나머지를 임시 저장하고 그 몫인 잔돈의 개수를 합한다. 임시 저장한 나머지를 그 다음 크기의 잔돈으로 나누어 그 나머지를 임시 저장하고 그 몫인 잔돈의 개수를 누적하여 더한다. 이 과정을 제일 작은 잔돈이 나올때까지 반복하며 각 잔돈의 개수를 누적해 합한뒤 결..

공부하기/백준 2023.05.31

[Java] 백준 풀기 2839 - 설탕 배달

자바 백준 2839번 실버 4 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제 보기 분류: 수학, 다이나믹 프로그래밍, 그리디 알고리즘 문제 풀기 설탕 봉지의 개수를 가장 적게 하기 위해서는 5kg 의 개수가 가능한 최대여야 한다. 따라서 주어진 무게에서 5kg 을 나눈 몫을 최대로 두고 5kg 의 봉지를 하나씩 제거하면서 그 남의 무게가 3kg 으로 나누어 떨어지는지 확인한다. 그렇게 나누어떨어지는 시점이 최소 봉지 개수의 반환이며, 남은 무게가 ..

공부하기/백준 2023.05.28

[Java] 백준 풀기 2847 - 게임을 만든 동준이

자바 백준 2847번 실버 4 https://www.acmicpc.net/problem/2847 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net 문제 보기 분류: 그리디 알고리즘 문제 풀기 게임의 레벨이 높으면 그 아래 레벨보다 점수가 높아야 하기 때문에 가장 높은 레벨부터 점수를 확인하는 식으로 하여 레벨을 내려가며 검사한다. 총 레벨의 개수만큼 array 를 생성하여 그 안에 레벨이 낮은 순서로 숫자를 입력한다. 점수가 모두 입력된 array 에서 for loop 를 통해 제일 마지막 index 부터 바..

공부하기/백준 2023.04.22

[Python] 백준 풀기 16435 - 스네이크버드

파이썬 백준 16435번 실버 5 https://www.acmicpc.net/problem/16435 16435번: 스네이크버드 첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다. www.acmicpc.net 문제 보기 분류: 그리디 알고리즘, 정렬 문제 풀기 과일을 높이 순으로 오름차순 정렬하여 제일 낮은 과일과 스네이크버드의 길이를 비교한다. 이때, 과일의 높이가 스네이크버드의 길이 보다 작거나 같은면 +1 을 해주고 다음 과일의 높이와 비교한다. 이 반복 작업을 하다가 과일의 높이가 지속적으로 길어진 스네이크버드..

공부하기/백준 2023.02.24