[BOJ][C#] 9465 스티커

LimJaeJun·2023년 8월 3일
0

PS/BOJ

목록 보기
5/108

📕 문제

📌 링크
문제 사진

📘 코드

namespace BOJ
{
    class No_9465
    {
        static void Main()
        {
            using StreamReader input = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
            using StreamWriter output = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));

            int t = int.Parse(input.ReadLine());

            while(t-- > 0)
            {
                int n = int.Parse(input.ReadLine());
                int[,] array = new int[2, n];

                for(int i=0 ;i<2 ;i++)
                {
                    int[] inputs = Array.ConvertAll(input.ReadLine().Split(), int.Parse);
                    
                    for(int j=0 ;j<n ;j++)
                        array[i, j] = inputs[j];
                }

                // dp[i,j] = i,j 좌표에서의 스티커 점수의 최댓값
                // 스티커는 변을 공유하지 않음

                int[,] dp = new int[2, n];

                dp[0, 0] = array[0, 0];
                dp[1, 0] = array[1, 0];

                // 자신과 첫번째 대각선
                // 자신과 두번째 대각선
                for(int i=1 ;i<n ;i++)
                {
                    if(i==1)
                    {
                        dp[0, 1] = dp[1, 0] + array[0, 1];
                        dp[1, 1] = dp[0, 0] + array[1, 1];
                    }
                    else
                    {
                        dp[0, i] = Math.Max(dp[1, i - 1] + array[0, i], dp[1, i - 2] + array[0, i]);
                        dp[1, i] = Math.Max(dp[0, i - 1] + array[1, i], dp[0, i - 2] + array[1, i]);
                    }
                }

                output.WriteLine(Math.Max(dp[0, n-1], dp[1, n-1]));
            }
        }
    }
}

📙 오답노트

N = 1일때를 고려하지않아 98%의 테스트 케이스에서 OutOfIndexRange 에러가 발생하였다.
왜 에러가 뜨는지 바로 생각하지 못하고 질문하기에서 질문을 보고 확인하였다. [링크]
다음엔 좀 더 신중하게 문제를 풀어봐야겠다.

📒 알고리즘 분류

  • 다이나믹 프로그래밍
profile
Dreams Come True

0개의 댓글

관련 채용 정보