알고리즘/Programmers
[Programmers] 고득점 Kit - Stack/Queue : 쇠막대기 #42585
kkoon9
2020. 1. 16. 19:20
문제 링크
문제 조건
- 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다.
- 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다.
- 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다.
- 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다.
- 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 '()'으로 표현한다.
- 또한 모든 '()'는 반드시 레이저를 표현한다.
- 쇠막대기의 왼쪽 끝은 여는 괄호 '('로, 오른쪽 끝은 닫힌 괄호 ')'로 표현된다.
변수 설명
- arrangement : 쇠막대기와 레이저의 배치를 표현한 문자열 (매개변수)
- left_cnt : '('의 개수
코드 설명
- arragement에 index를 순차적으로 접근해준다.
- 해당 index의 값이 '('라면 left_cnt를 더해준다.
- 해당 index의 값이 ')'라면
- 그 전 index의 값이 '('라면 (--left_cnt)을 answer에 더해준다.
- 그 전 index의 값이 ')'라면 answer++ 해준 뒤 left_cnt--해준다.
배운 점
- java는 String index 접근을 charAt(int i)를 사용해야 한다.
문제 해답
class Solution {
public int solution(String arrangement) {
int answer = 0;
int len = arrangement.length();
int left_cnt = 1;
for(int i = 1;i < len;i++){
if(arrangement.charAt(i) == '(') {
left_cnt++;
}
else {
if(arrangement.charAt(i-1) == '('){
answer += (--left_cnt);
}
else {
answer++;
left_cnt--;
}
}
}
return answer;
}
}