Programmers 괄호 회전하기 Javascript

cptkuk91·2022년 10월 4일
1

Algorithm

목록 보기
107/161

문제

https://school.programmers.co.kr/learn/courses/30/lessons/76502?language=javascript

코드

function solution(s) {
	let result = 0;
    
    let stack = [];
    
    let flag = true;
    
    if(s.length % 2 === 1){
    	return 0;
    }
    
    for(let i = 0; i < s.length; i++){
    	let tmp = s.slice(i) + s.slice(0, i);
        flag = true;
        for(let word of tmp){
        	if(word === "(" || word === "{" || word === "["){
            	stack.push(word);
            } else {
            	let leftword = stack.pop();
                if(word === ")" && leftword === "(") continue;
                if(word === "}" && leftword === "{") continue;
                if(word === "]" && leftword === "[") continue;
                flag = false;
                break;
            }
        }
        if(flag) result++;
    }
    return result;
}

코드 풀이

  • 우선 짝수가 아닌 경우 성립할 수 없기 때문에 0을 반환합니다.

  • 시작값과 끝값을 하나씩 계산합니다. 그냥 정말 모든 경우의 수를 계산합니다.
    ex) ({}), (}{), [()], ][() 등등 틀리던 말던 진행합니다.
    현재 상태에서는 flag가 true입니다.

  • leftword = stack.pop() 마지막 자리를 뽑아냅니다.

  • 만약 ")", "}", "]" 포함된 상태에서 마지막 단어(leftword)가 "(", "{", "[" 라면
    flag를 false로 바꿔주고, break를 통해 중단합니다.

  • else 문을 통과하고 flag가 true인 경우 result++을 통해 1을 더해줍니다.

  • 문제가 원하는 반환값 result를 출력해 문제를 해결할 수 있습니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글