본문 바로가기

PS/백준

[BOJ] 백준 10799 쇠막대기 (Swift)

반응형

문제

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

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

풀이

스택을 사용해서 풀 수 있는 문제
괄호 문자열을 for문을 돌려서 살펴보면서 다음과 같은 동작을 수행한다.

  1. 여는괄호 등장 시 "(" 는 stack에 추가
  2. 닫는괄호 등장 시 stack에 추가된 여는 괄호 제거 (pop)

2번 동작에서 직전의 문자를 보고 수행할 행동이 달라져야 함

  1. 직전의 문자가 여는 괄호라면?

레이저임, 기존의 Stack의 size 만큼 더해주어야 한다.
Stack에 담겨있는 여는괄호들은 레이저를 의미하는 것이 아닌 막대기의 시작점이므로, 몇개의 막대기를 갈랐는지 더해주는 것과 동일

  1. 직전의 문자가 여는 괄호가 아니면?

막대기의 끝
막대기의 끝이므로 1을 더해주어야 함.
막대기의 처음부터 끝까지 레이저가 자르지 않았어도 한개의 막대기이기 떄문이다.
잘랐더라고, 잘라진 곳부터 시작해서 끝까지의 부분이 한개의 막대기이기 때문에 1를 더해주는 것

소스코드

후기

괄호를 보자마자 먼저 스택을 떠올리게 되었다.
문제에 나와있는 그림을 보면서 로직을 떠올릴 수 있었던 문제

반응형