처리조건
풀이
맨 처음 들어오는 문자열 s는 일단 } , ) , ] 로 시작한다면 올바른 괄호 문자열인지 계산할 가치가 없다. 무조건 올바르지 않기때문이다 해당 조건에 만족하지 않는 문자열 s만 올바른 문자열인지 체크하는 함수를 만들어서 검사후 true라면 count를 올리게 될 것이고 문자열은 회전을 하기 때문에 문자열 길이만큼 for문을 돌려 split을 한 뒤 배열로 하나하나 문자열을 나누고 맨 앞자리를 짤라 맨 뒤에 push하여 다시 join하여 문자열로 만든 뒤 반복하게 된다.
checkString이라는 함수를 만들어 문자열을 받고 올바른 괄호 문자열 인지 검사한다.
while문을 돌려 i와 i+1이 서로 괄호로 닫겨 있는 모양이라면 해당 부분을 splice로 잘라내고 다시 남은 괄호들을 붙여서 문자열로 만든 뒤 break하여 반복적으로 올바른 괄호들을 제거해나간다. for문에서 만약 한번도 삭제할 괄호가 없다면내부에 길이는 1이상인 상태이므로 false를 리턴하게하며 그 이외에는 길이가 0이 될 때 까지 제거됐으므로 true를 리턴한다.
function solution(s) {
let count = 0;
for (let i = 0; i < s.length; i++) {
if (s[0] !== "}" && s[0] !== ")" && s[0] !== "]" && checkString(s)) count++;
s = s.split("");
s.push(s.shift());
s = s.join("");
}
return count;
}
function checkString(s) {
let answer = true;
while (true) {
if (s.length <= 0) break;
let checkCount = 0;
for (let i = 0; i < s.length; i++) {
if ((s[i] === "{" && s[i + 1] === "}") || (s[i] === "[" && s[i + 1] === "]") || (s[i] === "(" && s[i + 1] === ")")) {
s = s.split("");
s.splice(i, 2);
s = s.join("");
checkCount++;
break;
}
}
if (checkCount === 0) {
answer = false;
break;
}
}
return answer;
}
'일반 학습 > 코딩 테스트' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 (0) | 2022.03.23 |
---|---|
[프로그래머스] 위장 (0) | 2022.03.22 |
[프로그래머스] 예상 대진표 (0) | 2022.03.21 |
[프로그래머스] 게임 맵 최단거리 (0) | 2022.03.19 |
[프로그래머스] 조이스틱 (0) | 2022.03.18 |
댓글