알고리즘/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;
    }
}