C#/백준 알고리즘

2022.02.08 [백준] C# 포도주 시식

ian's coding 2022. 2. 8. 00:29
728x90
반응형

 

https://www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net

 


풀이

이 문제의 경우의 수는 

 

1. n-1번째 잔을 마시지 않은 경우

2. n-2번째 잔을 마시지 않은 경우

3. n번째 잔을 마시지 않은 경우

 

총 3가지의 경우의 수가 있다.

1, 2 의 경우의 수는 바로 생각이 나서 코드를 작성했지만 바로 틀렸다는 결과를 받았고, for문을 돌릴 때, i번째 잔은 무조건 마신다는 생각을 당연하게 하고 있어서 엄청 시도했지만 모두 실패했다. 그래서 구글링을 하다가 i번째 잔을 안마시는 경우가 있는 것을 알게 되었고 총 3가지의 경우의 수를 참고하여 코드를 작성했다.

 

문제를 풀면 풀수록 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
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Text;
using System.IO;
 
class Program
{
    static int[] num;
    static int[] sum;
 
    static void Max(int n)
    {
        for(int i = 3; i <= n; i++)
        {
            
            sum[i] = Math.Max(sum[i - 2+ num[i], Math.Max(sum[i - 3+ num[i - 1+ num[i], sum[i-1]));
            
            
        }
        
    }
 
    static void Main()
    {
        StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
        StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
        StringBuilder sb = new StringBuilder();
        int n = int.Parse(sr.ReadLine());
        num = new int[n+1];
        sum = new int[n+1];
        for (int i = 1; i <= n; i++)
        {
            num[i] = int.Parse(sr.ReadLine());
        }
        sum[1= num[1];
        if (n > 1)
        {
            sum[2= num[1+ num[2];
        }
        Max(n);
        sw.WriteLine(Math.Max(sum[n],sum[n-1]));
        sr.Close();
        sw.Close();
    }
}
cs

 

 

 

 

728x90
반응형