-
백준 16435번: 스네이크 버드 (Python/Java)Algorithm/Algorithm Problem 2022. 1. 2. 18:32
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
접근
그리디 알고리즘의 개념을 익히는 단계에서 풀어볼 만한 아주 간단한 문제였다.
그리디 알고리즘은 현재 단계에서 최선의 선택을 해야 한다. 이 문제에서 최선의 선택이란, 자신이 먹을 수 있는 가장 낮은 높이의 과일부터 순서대로 하나씩 먹으며 길이를 늘리는 것이다. 이를 위해 과일 리스트들을 높이가 낮은 순서대로 정렬한 뒤, 현재 스네이크버드의 길이와 과일의 높이를 비교해 먹거나 안 먹거나를 선택하면 된다.
높이가 낮은 순서대로 정렬해뒀기 때문에 자신이 못 먹는 과일이 나오는 순간 그 뒤는 더 이상 비교해볼 필요가 없다. 자신이 못 먹는 과일이 나오는 순간 바로 스네이크 버드의 길이를 출력해준다.풀이
Python
fruitNum, snakebird = map(int, (input()).split()) fruitList = [] fruits = (input()).split() for i in range(fruitNum): fruitList.append(int(fruits[i])) fruitList = sorted(fruitList) for i in range(fruitNum): if snakebird >= fruitList[i]: snakebird += 1 else: break print(snakebird)
Javaimport java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String[] firstLine = (scan.nextLine()).split(" "); int fruitNum = Integer.parseInt(firstLine[0]), snakebird = Integer.parseInt(firstLine[1]); int[] fruitList = new int[fruitNum]; String[] secondLine = (scan.nextLine()).split(" "); for(int i = 0 ; i < fruitNum ; i++){ fruitList[i] = Integer.parseInt(secondLine[i]); } Arrays.sort(fruitList); for(int i = 0 ; i < fruitNum ; i++){ if(snakebird >= fruitList[i]){ snakebird++; }else { break; } } System.out.println(snakebird); } }
후기
여태까지는 구현, 그래프 문제를 중심으로 알고리즘 풀이를 했기 때문에 그리디 알고리즘 공부에 대한 필요성을 느끼고 알고리즘 개념을 익혔다.
초반부터 바로 난이도 높은 문제를 풀면 힘들 것 같아 쉬운 문제를 골랐더니... 생각보다 너무 쉬운 문제를 골라버렸다;;;
어쨌든 그리디 알고리즘의 기초적인 적용에 대해 생각해볼 수 있는 연습 문제라고 생각하면 나쁘지 않았던 문제라고 생각한다.'Algorithm > Algorithm Problem' 카테고리의 다른 글
백준 12845번: 모두의 마블 (Python/Java) (0) 2022.01.07 백준 20413번: MVP 다이아몬드 (Easy) (Python/Java) (0) 2022.01.06 백준 20365번: 블로그2 (Python/Java) (0) 2022.01.05 백준 12018번: Yonsei TOTO (Python/Java) (0) 2022.01.04 백준 1343번: 폴리오미노 (Python/Java) (0) 2022.01.03