복대가리의 개발

[C#] 백준 (알고리즘)/실버 문제

[백준 - C#] 16435번 스네이크버드

복대가리 2022. 8. 1. 22:28
728x90

문제링크

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만큼 늘어납니다.
과일들은 지상으로부터 일정 높이를 두고 떨어져 있으며 i (1 ≤ i ≤ N) 번째 과일의 높이는 hi입니다. 
스네이크버드는 자신의 길이보다 작거나 같은 높이에 있는 과일들을 먹을 수 있습니다.
스네이크버드의 처음 길이가 L일때 과일들을 먹어 늘릴 수 있는 최대 길이를 구하세요.

조건

시간제한 : 1초
메모리 제한 : 128 MB

입력

첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다.

두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다.

출력

첫 번째 줄에 스네이크버드의 최대 길이를 출력합니다.

 

문제정리

이번 문제의 경우 스네이크버드가 과일을 먹을 수 있을 때까지의 최대 길이를 구하는 문제입니다.

스네이크 버드는 자신의 길이보다 작거나 같은 높이의 과일을 먹을 수 있기 때문에

과일을 오름차순으로 정렬하여 제일 작은 것부터 먹도록 하였습니다.

 

만약 과일을 먹을 수 없다면 그 후 쭉 먹을 수 없다는 말이 되기 때문에 반복문을 종료하고 출력하였습니다.

 

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
static void Main(string[] args)
{
    // 16435 스네이크버드
    StreamWriter writer = new StreamWriter(OpenStandardOutput());
    StreamReader reader = new StreamReader(OpenStandardInput());
 
    string[] input = reader.ReadLine().Split();
    string[] input2 = reader.ReadLine().Split();
 
    int N = int.Parse(input[0]);
    int L = int.Parse(input[1]);
    int[] H = new int[N];
 
    for (int i = 0; i < N; i++)
        H[i] = int.Parse(input2[i]);
 
    // 자신의 길이보다 작거나 같은 높이 부터 먹기위에 오름차순으로 정렬
    Array.Sort(H);
 
    for (int i = 0; i < N; i++)
    {
        if (L >= H[i]) // 먹을 수 있는지 확인
            L++;
        else // 못먹으면 반복문 종료
            break;
    }
 
    writer.WriteLine(L);
 
    writer.Close();
    reader.Close();
}
cs

읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.

 

728x90