저장을 습관화
프로그래머스 LV.2 올바른 괄호 본문
프로그래머스 LV.2 올바른 괄호
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
올바른 괄호
2. 문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.
예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고,
올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
3. 제한 사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
4. 예시
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
5. 기본 제공 코드
function solution(s){
var answer = true;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
console.log('Hello Javascript')
return answer;
}
6. 제출한 내 답
const solution = (s) => {
let n = ["("];
let arr = s.split("");
if (arr[0] === ")") {
return false;
} else {
for (i = 1; i < arr.length; i++) {
arr[i] === "(" ? n.push("(") : n.pop();
}
return n.length ? false : true;
}
};
6-2. VSC에 작성한 내용
const solution = (s) => {
let n = ["("];
let arr = s.split("");
if (arr[0] === ")") {
return false;
} else {
for (i = 1; i < arr.length; i++) {
arr[i] === "(" ? n.push("(") : n.pop();
}
return n.length ? false : true;
}
};
// 테스트
console.log(solution("()()"));
console.log(solution("(())()"));
console.log(solution(")()("));
console.log(solution("(()("));
console.log(solution("())(()"));
7. 특이사항
더 깔끔하기 표현하는 방법도 있을것 같은데..
아 다시 생각하니 내 풀이법도 틀린것 같다
const solution = (s) => {
let n = ["("];
let arr = s.split("");
if (arr[0] === ")") {
return false;
} else {
for (i = 1; i < arr.length; i++) {
arr[i] === "(" ? n.push("(") : n.pop();
}
return n.length ? false : true;
}
};
내 코드에서는 모든 항목을 확인하여 (면 배열에 추가,
)면 배열의 마지막 요소 제거하고,
배열 n을 검사하여 내용이 남아있으면 false, 남은 것 없이 모두 pop 되었다면 true 하는 내용이지만
만약 채점 항목이 ( ) ) ) ( ) ( ) 였다면
코드 흐름이 빈 배열에 계속 pop()을 하게 될테니.. 채점에서는 통과되었지만
문제가 요구하는 내용에는 맞지 않다고 생각한다..
그 외 틀렸던 방법
const solution = (s) => {
let n = 0;
let arr = s.split("");
if (arr[0] === ")") {
return false;
}
const testing = (which) => {
if (which === "(") {
n += 1;
} else if (which === ")") {
n -= 1;
}
};
arr.forEach((which) => testing(which));
return n === 0 ? true : false;
};
입출력 예시는 맞으나 단순히 (와 )의 개수 비교가 되어
())(() 같은 경우도 참이라고 나오게 됨
8. 다른 사람이 작성한 답
8-1. 가장 많이 쓰인 풀이법, 좋아요를 가장 많이 받은 풀이법
function solution(s){
let cum = 0
for (let paren of s) {
cum += paren === '('? 1: -1
if(cum < 0) {
return false
}
}
return cum === 0? true: false;
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.2 JadenCase 문자열 만들기 (0) | 2023.10.02 |
---|---|
프로그래머스 LV.1 같은 숫자는 싫어 (0) | 2023.10.02 |
프로그래머스 LV.1 최대공약수와 최소공배수 (0) | 2023.10.02 |
프로그래머스 LV.2 최솟값 만들기 (0) | 2023.10.02 |
[못풀음] 프로그래머스 LV.0 무작위로 K개의 수 뽑기 (0) | 2023.10.02 |