<답안>
#include <iostream>
using namespace std;
int main()
{
string s;
int max = -1,sum = 0;
cin>>s;
for(int i=0; i<s.size(); i++)
{
if(s[i] == '[')
{
sum += 3;
}
else if(s[i] == '{')
{
sum += 2;
}
else if(s[i] == '(')
{
sum += 1;
}
else if(s[i] == ')')
{
sum -= 1;
}
else if(s[i] == '}')
{
sum -= 2;
}
else if(s[i] == ']')
{
sum -= 3;
}
else if(s[i] >= '0' && s[i] <= '9')
{
if(sum > max)
max = sum;
}
}
cout<<max;
return 0;
}
<설명>
처음에 접근이 쉽게되지 않았다. 숫자 기준으로 왼쪽 오른쪽? 같은숫자가 입력될수도 있는데 이건?
그러다가 머리를 스쳐간 개념은 [, {, ( 만나면 3,2,1 더하고, ), }, ] 만나면 1,2,3 빼면서 최고를 기록한 max값을 출력하면 되지않나?
그렇게 알고리즘은 그대로이다
[ 일때 +3, { 일때 +2, ( 일때 +1, )
) 일때 -1, } 일때 -2, ] 일때 -3
단, max값을 갱신하는 때는 "숫자"가 입력됬을때이다. 숫자없이 () 입력되는 경우는 피해야 하기 때문이다
그렇게 누적된 sum > max이면 max = sum 바꾼다음
최종적으로 max를 출력한다
'백준 > Inha Algorithm Study Group' 카테고리의 다른 글
DAY4 초급 - 백준 17262번 (C++) (0) | 2020.09.05 |
---|---|
DAY3 고급 - 백준 16120번 (C++) (0) | 2020.09.04 |
DAY3 초급 - 백준 2828번 (C++) (0) | 2020.09.04 |
DAY2 고급 - 백준 13022번 (C++) (0) | 2020.09.04 |
DAY2 중급 - 백준 13413번 (C++) (0) | 2020.09.04 |