Programming/Baekjoon

BOJ ) 10799번 쇠막대기

Holuck 2019. 5. 23. 21:17

https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. 레이저는 어떤 쇠막대기의 양 끝점과

www.acmicpc.net

문제를 읽어보면  '(' 다음에 바로 ')' 이렇게 나오면 레이저가 됩니다 ==>()

그렇지 않고 그냥 '(' 만 있다면 파이프의 시작 부분이 되는것입니다. 

그리고 ')'는 파이프가 끝나는 부분이 됩니다. 

 

그러므로 파이프가 생성될 때 pipe_counter를 1씩 증가시켜주고 레이저가 나온다면 우선 pipe_count만큼 잘리게 됩니다.

파이프가 끝나게 되면 정답에 +1을 해주어 총 파이프 한개가 레이저에 의해 잘린 횟수가 정답에 더해지게 됩니다.

 

 

#include<iostream>
#include<string>
using namespace std;
//https://www.acmicpc.net/problem/10799
string s;
int pipe_counter;
int laser_counter;
int answer;
int main(){
cin >> s;
for(int i=0;i<s.size();i++){
if(s[i]=='('&&s[i+1]==')'){
//it's laser!!
i++;
answer+=pipe_counter;
}
else if(s[i]=='('){
//it's start of pipe
pipe_counter++;
}
else if(s[i]==')'){
//it's end of pipe
answer++;
pipe_counter--;
}
}
cout << answer;
}
view raw 10799.cpp hosted with ❤ by GitHub