프로젝트 때문에 바쁘다가 오랜만에 풀어보는 알고리즘 문제이다.
올바른 괄호 https://school.programmers.co.kr/learn/courses/30/lessons/12909
내가 생각한 문제의 핵심은
- 시작은 반드시 "("
- "("와 ")" 개수가 맞아야 한다.
따라서 제출한 답은
function solution(s) {
if (s[0] === ")" || s.length % 2 !== 0) return false
let arr = s.split("")
let count = 0
for (i = 0; i < arr.length; i++) {
if (count === 0 && arr[i] === ")") return false
if (arr[i] === "(") {
count++
} else { count-- }
}
return count === 0 ? true : false
}
이렇게 제출했다.
시작이 ")" 이거나 글자수가 홀수이면 바로 flase를 리턴하고, 문자열을 배열로 바꾼 다음 반복문으로 처리했다. 이것도 통과는 했지만 다른 사람의 풀이를 보면은
// 다른 사람 풀이
function solution2(s) {
let cum = 0
// 이터러블이니까 for of 문으로 처리
for (let paren of s) {
cum += paren === '(' ? 1 : -1
// ")" 로 시작하면 음수가 되어 false
if (cum < 0) {
return false
}
}
return cum === 0 ? true : false;
}
- 문자열도 이터러블이라 배열로 바꿀 필요가 없다. 오랜만에 풀어서 이런 것도 활용하지 못했다.
- 삼항 연산자를 활용하여 보다 깔끔하게 반복문을 처리했다. 이것도 전에 if else면 삼항 연산자를 늘 생각했는데 잊고 있었다.
- ")"로 시작하면 음수가 되어 바로 리턴을 시키는 센스가 좋았다.
물론 나도 짝수가 아니면 리턴 시키는 점에서 조금 나은 부분도 있다. 알고리즘 까먹지 않게 풀어줘야겠다.
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
영어 끝말잇기 (0) | 2023.10.17 |
---|---|
피보나치 수 (0) | 2023.10.17 |
sort() 활용 (0) | 2023.06.28 |
스택을 사용하는 문제 (0) | 2023.06.25 |
생각을 넓히자 (0) | 2023.06.23 |