👀 문제
https://programmers.co.kr/learn/courses/30/lessons/42585
👊 첫 번째 도전
1. 설계
- ()을 사용하는 문제이므로 스택을 이용한다.
- (은 스택에 넣는다.
- )인 경우 앞이 (라면 레이저이다.
- ))이라면 닫는 괄호이다.
i) ()인 경우. 이 경우는 레이저이다. 위와 같이 ()를 제외한 여는 괄호 갯수 만큼 막대기가 생긴다.
ii) ))인 경우. 쇠막대기의 끝을 나타낸다. 이 경우는 항상 1이다. 끝난 쇠막대기는 하나밖에 없기 때문이다.
2. 구현
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
import java.util.Stack;
/**
*
* @author HEESOO
*
*/
class Solution {
public int solution(String arrangement) {
int answer = 0;
Stack<Character> st=new Stack<Character>();
char ch;
for(int i=0;i<arrangement.length();i++){
ch=arrangement.charAt(i);
if(ch=='('){
st.push(ch);
}
else if(!st.isEmpty()&&ch==')'){
st.pop();
if(arrangement.charAt(i-1)=='('){
answer+=st.size();
}
else{
answer++;
}
}
}
return answer;
}
}
- Stack
st: arrangement를 char형태로 하나씩 넣는다. 경험상 괄호 문제는 스택으로 푸는 경우가 대부분이다. - char ch: String형태의 arrangement를 문자 하나씩 받아와 코드를 진행한다.
3. 결과
🤟 성공 🤟
👏 해결 완료!
처음 문제를 접했을 때는 그림이 복잡해보여서 어려울 것이라고 생각했는데, 이해만 하면 간단한 문제였다. 앞으로는 자신감을 갖고 문제를 풀어야겠다!