본문 바로가기

알고리즘

프로그래머스 - 쇠막대기

https://programmers.co.kr/learn/courses/30/lessons/42585

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

프로그래머스 쇠막대기 문제로 스택을 활용한 풀이 방법입니다.

테스트 케이스 그림

문제의 그림을 보고 겁먹지 말고 차분히 막대의 개수를 세어보면 쉽게 풀 수 있는 문제였습니다.

'(' 와 ')' 가 바로 만나는 모양인 ()는 레이저라고 생각하면 되고 레이저가 발사되기 전 만나는 '(' 의 갯수만큼 쇠막대기가 추가됩니다.

그러나 이렇게 될 경우 마지막 막대기의 잘리는 부분을 카운트 할 수 없기때문에 고민했지만 ')'의 개수로 카운트 할 수 있습니다.

저는 이 문제의 카테고리가 스택/큐이기 때문에 당연히 스택부터 먼저 떠올려서 문제 풀이를 시작했습니다.

제가 생각한 코드작성 방법은 아래와 같습니다.

1. '()'을 다른 문자로 치환한다.

2. '(' 을 만나게 되면 스택에 담는다.

3. 치환한 문자를 만나게 되면 지금까지 스택의 개수만큼을 더해준다.

4. ')' 을 만나게 되면 +1을 하고 스택을 팝해준다. ( 쌍을 맞추기 위함, pop을 해주지 않을 경우 스택의 사이즈는 계속해서 증가함)

정답 코드

import java.util.Stack;

class Solution {
        public int solution(String arrangement) {
            int answer = 0;

            Stack stack = new Stack();

            String newArrangement = arrangement.replace("()", "0");

            for(int i=0; i<newArrangement.length(); i++){
                if(newArrangement.charAt(i) == '('){
                    stack.add(newArrangement.charAt(i));
                } else if(newArrangement.charAt(i) == '0'){
                    answer += stack.size();
                } else if(newArrangement.charAt(i) == ')'){
                    stack.pop();
                    answer+=1;
                }
            }


            return answer;
        }
    }

 

잡설을 하자면. . 정말 알고리즘 풀이는 컨디션에 따라 정말로 많이 달라진다는걸 요즘 들어 계속해서 체감중입니다..

오늘은 컨디션이 좋았나봅니다.. ㅎㅎ

그리고 하루에 포스팅 하나가 제 목표인데 지킬 수 있을까요? ㅎㅎ 

AWS 공부를 요즘 소홀히 했는데 AWS 공부도 다시 열심히 해봐야겠습니다!

 

'알고리즘' 카테고리의 다른 글

프로그래머스 - 위장  (1) 2020.04.10
프로그래머스 - 완주하지 못한 선수  (0) 2020.04.10
프로그래머스 - 체육복(그리디)  (2) 2020.04.06
프로그래머스 - 숫자야구  (0) 2020.04.04
프로그래머스 - 카펫  (2) 2020.04.04