백준(Backjoon) 10799, 쇠막대기
2021. 7. 6. 15:50ㆍCodingTest
문제풀이
제가 생각한 위 문제의 핵심은 레이저가 발사 시 발사된 가운데를 기점으로 쇠막대기의 왼쪽의 개수를 세는 것입니다. 그리고 오른쪽의 개수는 파이프가 끝날때마다 1개씩 추가해주는 것이라고 생각합니다.
위의 설명을 스택에 적용한다면 다음과 같습니다.
- "(" 문자열이 입력될때마다 스택에 "(" 문자열 push
- ")" 문자열이 입력될 때 pop 수행, 그리고 ")" 문자열이 레이저인지 파이프의 종료인지 검사
- 입력된 ")" 문자열의 이전 문자열이 "(" 인 경우 : 레이저
- 레이저 인경우 스택의 사이즈 만큼 결과 변수에 누적
- 입력된 ")" 문자열의 이전 문자열이 ")" 인 경우 : 파이프의 종료
- 파이프의 종료인 경우 결과 변수에 1만큼 누적
- 입력된 ")" 문자열의 이전 문자열이 "(" 인 경우 : 레이저
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static int solution(String[] input)
{
Stack<String> stack = new Stack<String>();
int answer = 0;
for(int i=0;i<input.length;i++)
{
if(input[i].equals("("))
{
stack.add(input[i]);
}
else
{
stack.pop();
if(input[i-1].equals("(")) // 레이저
{
answer += stack.size();
}
else // 파이프
{
answer++;
}
}
}
return answer;
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split("");
System.out.println(solution(input));
}
}
References
백준-10799 쇠막대기, 화투의 개발 블로그, https://hsp1116.tistory.com/29
'CodingTest' 카테고리의 다른 글
백준(Backjoon) 1259, 팰린드롬수 (0) | 2021.07.08 |
---|---|
백준(Backjoon) 10820, 문자열 분석 (0) | 2021.07.07 |
백준(Backjoon) 1026, 보물 (0) | 2021.07.06 |
백준(Backjoon) 11655, ROT13 (0) | 2021.07.05 |
백준(Backjoon) 1076, 저항 (0) | 2021.07.02 |