Dolphins의 HelloWorld
SW Expert Academy 5432.쇠막대기 자르기 D4 본문
주어진 문제를 풀기위해 string 형식으로 위의 괄호 표현을 받은 후
반복문을 통해 첫번째 괄호부터 검사를 해나갔다.
먼저 '(' 를 탐색했을 떄는 다음 배열을 탐색하여 이것이 레이저인지, 쇠막대기가 추가되는 것인지
검사를 하였다.
쇠막대기가 추가된 것이라면 변수에 쇠막대기의 갯수를 추가해주고
레이저라면 현재 있는 쇠막대기의 수 만큼 결과값에 더해주도록 하였다.
위의 그림을 예로들자면 두번째 레이저가 나왔을 떄는 쇠막대기가 3개있는 상태기 때문에
결과값이 3이 된다. 그리고 다음 레이져가 나왔을 떄도 쇠막대기가 3개있기 때문에
3을 다시 더해서 결과값이 6이된다.
마지막으로 ')'를 만났을 때는 쇠막대기가 끝나는 부분이므로 결과값에 1을 더했다
그 이유는 예를들어 하나의 쇠막대기가 3개의 레이저를 만났다면 4토막 나는 것 같이
레이저 갯수 + 1 토막이 나므로 이 1을 반영해 주는것이다.
#include <iostream> #include <string> using namespace std; int main() { int testcase; scanf("%d", &testcase); string s; for (int i = 1; i <= testcase; i++) { cin >> s; int number = 0; //쇠 막대기의 수 int result = 0; //잘라진 쇠막대기의 수 for (int i = 0; i < s.size(); i++) { if (s[i] == '(' && s[i + 1] == ')') { //레이저가 나오는 경우 result += number; //현재 막대기의 수 만큼 더한다. i++; } else if (s[i] == '(') { //쇠 막대기가 추가되는 경우 number++; } else if (s[i] == ')') { //쇠막대기가 끝나는 경우 number--; result++; } } printf("#%d %d\n", i, result); } }
'Algorithm > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy 4796. 의석이의 우뚝 선 산 D4 (0) | 2018.08.21 |
---|---|
SW Expert Academy 4789. 성공적인 공연 기획 D3 (0) | 2018.08.20 |
SW Expert Academy 5213. 진수의 홀수 약수 D4 (0) | 2018.08.19 |
SW Expert Academy 1859. 백만장자 프로젝트 D2 (0) | 2018.08.19 |
Comments