C# 1541번 잃어버린 괄호

2022. 2. 7. 19:31C#/[백준] 그리디 알고리즘

문제

코드 :

using System;
using System.Collections.Generic;
namespace _4
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            string[] OnlyPlus = input.Split('-');
            int output = 0;
            foreach (var item in OnlyPlus[0].Split('+'))
            {
                output += Convert.ToInt32(item);
            }


            if(OnlyPlus.Length == 1)
                Console.WriteLine(output);
            else
            {
                for (int i = 1; i < OnlyPlus.Length; i++)
                {
                    string[] MinusStr = OnlyPlus[i].Split('+');
                    foreach (var item in MinusStr)
                    {
                        output -= Convert.ToInt32(item);
                    }
                }
                Console.WriteLine(output);
            }
        }
    }
}

문제 풀이 :

1. (-)를 기준으로 전체 문자열을 자른다.

(-)가 없을 경우 OnlyPlus[0]에 모든 문자열이 들어갔을 것이고 이를 모두 더하기만 하면 된다.

2. 만약 OnlyPlus의 길이가 2이상이라면 문자열중 (-)가 한번이라도 포함되었다는 의미를 가지므로 OnlyPlus[1]부터 모든 수를 뺀다.

왜냐하면 마이너스 바로 뒤에 괄호를 만들어 무조건 가장 큰 수를 만들어야 최소값이 되기 때문이다. 즉 (-)뒤를 괄호로 묶는 다는 의미는 괄호를 풀어보면 숫자를 (-)로 바꿔준다와 같은 의미이므로 전부 빼주면 된다.

 

'C# > [백준] 그리디 알고리즘' 카테고리의 다른 글

C# 13305번 주유소  (0) 2022.02.07
C# 11399번 ATM  (0) 2022.02.07
C# 1931번 회의실 배정  (0) 2022.02.07
C# 11047번 동전 0  (0) 2022.02.07