티스토리 뷰

알고리즘/백준

[백준] 10799번 쇠막대기

머어하지 2018. 11. 19. 23:27

생각

Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q10799.java 쇠막대기의 정보와 레이저의 정보를 준다. 레이저는 무조건 ()로 표시된다. '('는 쇠막대기의 시작을 ')'는 쇠막대기의 끝을 의미한다. 쇠막대기가 놓아져 있을때 '()' 즉 레이저를 만나면 쇠막대기가 쪼개진다. 쇠막대기와 레이저의 정보를 주었을 때 총 몇 조각의 쇠막대기가 나오는지 구하여라.


처음 생각

어디서 풀어본 문제라 생각해서 찾아보니 SW Expert에서 풀어본 문제였다.

▶ [SW Expert] 5432. 쇠막대기 자르기



다음 생각

문제 분류가 Stack이기도하고, 기존에 풀이는 변수로 관리해주었으므로 이번엔 Stack으로 관리해보았다.

▶ 변수를 다루던게 Stack으로 바뀌었으므로 Stack의 size로 현 막대기 개수를 처리해주면된다.

▶ 막대기의 끝나는 의미로 ')'를 만났을 경우 잘린 끝 조각이 하나가 있는 것이므로 전체 결과에 더해주는것을 조심해야한다.


방안

1) Java 풀이


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
package baekjoon.q10000;
 
import java.util.Scanner;
import java.util.Stack;
 
public class Q10799 {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        Stack stack = new Stack();
        String t = sc.next();
        int result = 0;
        for(int i=0;i<t.length();i++){
            if(t.charAt(i)=='('){
                if(t.charAt(i+1)==')'){
                    i++;
                    result += stack.size();
                    continue;
                }
                // 막대기 개수 +1
                stack.push(1);
            }else{
                // 막대기 개수 -1
                stack.pop();
                // 총 막대 개수 +1
                result++;
            }
        }
        System.out.println(result);
    }
}
 


2) 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
#include<iostream>
#include<string>
 
using namespace std;
 
int main(){
    int cnt=0,result=0;
    string t;
    cin>>t;
    for(int i=0;i<t.length();i++){
        if(t[i]=='('){
            if(t[i+1]==')'){
                i++;
                result+=cnt;
                continue;
            }
            cnt++;
        }else{
            cnt--;
            result++;
        }
    }
    cout<<result;
    return 0;
}


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 7576번 토마토  (0) 2018.11.22
[백준] 2589번 보물섬  (0) 2018.11.22
[백준] 9012번 괄호  (0) 2018.11.18
[백준] 10953번 A+B -6  (4) 2018.11.16
[백준] 10951번 A+B - 4  (0) 2018.11.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday