메모리: 37.8 MB, 시간: 4.08 ms
코딩테스트 연습 > 스택/큐
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0
2023년 11월 6일 22:9:43
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
s | answer |
---|---|
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
아래는 내가 처음 작성한 코드다.
function solution(s){
let answer = true;
let count = 0;
const a = s.split('');
for(let i = 0; i < a.length; i++){
if(a[i] == '(' ){
count ++;
}else if(a[i] == ')' ){
count --;
}
}
if(count !== 0){
answer = false;
}
return answer;
}
괄호 갯수만 맞으면 되겠지라는 생각에 작성했는데 테스트케이스가 오답처리 되었다.
"))(("나 ")()(" 도 오답인데, 결국 갯수가 같기 때문에 true로 반환된다.
function solution(s){
let answer = true;
let count = 0;
const a = s.split('');
for(let i = 0; i < a.length; i++){
if(a[0] == ')' ){
answer = false;
}else if(a[i] == '(' ){
count ++;
}else if(a[i] == ')' ){
count --;
if( count < 0 ) {
answer = false;
}
}
}
if(count !== 0){
answer = false;
}
return answer;
}
때문에 위처럼 했는데 효율성 테스트에서 탈락했다...
연산시간을 줄이기 위해 for문 시작하기 전 a[0] 가 ")" 일 경우 false를 answer에 대입 후 return해주어 for문이 불필요하게 돌지 않도록 작성해주었다.
count < 0 일 경우에도 이미 false이기 때문에 마찬가지로 break;를 추가해주었다.
function solution(s){
let answer = true;
let count = 0;
const a = s.split('');
if(a[0] == ')' ){
return answer = false;
}
for(let i = 0; i < a.length; i++){
if(a[i] == '(' ){
count ++;
}else if(a[i] == ')' ){
count --;
if(count < 0){
break;
}
}
}
if(count !== 0){
answer = false;
}
return answer;
}
위가 완성된 코드.
효율성 테스트까지 통과해버렸다.
이제 효율성 테스트까지 등장한다니,,, 쉽지 않다. 효율적으로 코드를 작성할 수 있도록 짱구를 좀 더 굴릴 시간이다.