Baekjoon Online Judge
16435번: 스네이크버드
첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다. 두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다.
www.acmicpc.net
[문제]
스네이크버드는 뱀과 새의 모습을 닮은 귀여운 생물체입니다.
스네이크버드의 주요 먹이는 과일이며 과일 하나를 먹으면 길이가 1만큼 늘어납니다.
과일들은 지상으로부터 일정 높이를 두고 떨어져 있으며 i (1 ≤ i ≤ N) 번째 과일의 높이는 hi입니다.
스네이크버드는 자신의 길이보다 작거나 같은 높이에 있는 과일들을 먹을 수 있습니다.
스네이크버드의 처음 길이가 L일때 과일들을 먹어 늘릴 수 있는 최대 길이를 구하세요.
[입력]
첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다.
두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다.
[출력]
첫 번째 줄에 스네이크버드의 최대 길이를 출력합니다.
[풀이]
이 문제 풀이의 핵심은 배열을 정렬하는 것이다.
과일의 높이가 오름차순으로 입력되지 않았을 경우를 고려하여
sort() 함수를 이용해 배열을 오름차순으로 정렬한다.
배열이 정렬된 상태에서 for문으로 스네이크버드의 길이 L이
배열의 i번째 값보다 크거나 같다면 L을 1 증가시킨다.
for문이 끝나면 마지막으로 L을 출력하면 된다.
[코드]
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N, L;
cin >> N >> L;
int* a = new int[N];
for (int i = 0; i < N; i++)
cin >> a[i];
sort(a, a + N);
for (int i = 0; i < N; i++)
{
if (a[i] <= L)
L++;
}
cout << L << endl;
return 0;
}
'Baekjoon > C++' 카테고리의 다른 글
[C++][BOJ/백준] 2751 수 정렬하기 2 (0) | 2024.01.05 |
---|---|
[C++][BOJ/백준] 2869 달팽이는 올라가고 싶다 (0) | 2023.11.08 |
[C++][BOJ/백준] 5585 거스름돈 (0) | 2023.11.03 |
[C++][BOJ/백준] 10214 Baseball (0) | 2023.11.02 |
[C++][BOJ/백준] 24266 알고리즘 수업 - 알고리즘의 수행 시간 5 (0) | 2023.11.02 |