Array.prototype.forEach
메서드를 사용하여 순회할때 마다 값을 arr
객체에서 불러와 result
배열에 담아주었다.line16 ~ line23
i반복문: 배열을 배열의 길이 만큼 순회 하면서 각 요소의 값이 다음 요소의 값과 짝인지 아닌지를 구분하며, 다음 요소와 짝이 맞다면 0 값으로 할당 하게 해주었다.line24 ~ line28
배열의 요소 만큼 짝 이 맞는 값들은 0값으로 대체 할당 해주었으니, 그 요소들을 제외하고 새로운 배열을 만들어준다. 여기서는 Array.prototype.filter
메서드를 사용하여 짝이 아직 안맞춰진 괄호들에 일치하는 값들이 남아있다.line29 ~ line31
여기서 result에 요소가 남아있지 않다면 위의line16 ~ line28
의 i 반복문과 필터 메서드를 중첩된 괄호들에도 적용시킬수 있도록 j 반복문으로 한번 더 감쌌다.01 function isValid(s) {
02 // 여기에 코드를 입력해주세요.
03 let result = [];
04 let arr = {
05 '(': 10,
06 ')': 9,
07 '[': 6,
08 ']': 5,
09 '{': 2,
10 '}': 1,
11 };
12 s.split('').forEach((e, i) => {
13 result.push(arr[e]);
14 });
15 for (let j = 0; j < 100; j++) {
16 for (let i = 0; i < result.length; i++) {
17 if (result[i] === 9 || 5 || 2) {
18 if (result[i] === result[i + 1] + 1) {
19 result[i] = 0;
20 result[i + 1] = 0;
21 }
22 }
23 }
24 result = result.filter((e) => {
25 if (e !== 0) {
26 return e;
27 }
28 });
29 if (!result[0]) {
30 break;
31 }
32 }
33 return !result[0] ? true : false;
34 }
function isValid(s) {
// 여기에 코드를 입력해주세요.
const sToArr = s.split('');
const sToArrLength = sToArr.length;
for (let i = 0; i < sToArrLength / 2; i++) {
for (let j = 0; j < sToArr.length; j++) {
if (sToArr[j] === '(' && sToArr[j + 1] === ')') {
sToArr.splice(j, 2);
break;
} else if (sToArr[j] === '{' && sToArr[j + 1] === '}') {
sToArr.splice(j, 2);
break;
} else if (sToArr[j] === '[' && sToArr[j + 1] === ']') {
sToArr.splice(j, 2);
break;
}
}
console.log(sToArr);
}
return (sToArr.length ? false : true);
}
첫번째 풀이와 같은 로직으로 각종 빌트인 메서드를 적용해보았다.
line13
에서 스트링을 배열로 변환해주는 코드에 배열 메서드 Array.from()
를 써보았다.
Array.from()
은 유사배열객체 또는 이터러블한 객체를 얕은복사를 통해 새로운 객체를 만들어준다.line18
에서 i 반복문과 배열 필터 메서드를 배열 필터 메서드 하나도 통합해 보았다.
line28
반환값에 지정해준 삼항 연산자의 결과가 (조건) ? true: false? 일때는 간편하게 조건만 적어주자
01 function isValid(s) {
02 // 여기에 코드를 입력해주세요.
03 let result = [];
04 let arr = {
05 '(': 10,
06 ')': 9,
07 '[': 6,
08 ']': 5,
09 '{': 2,
10 '}': 1,
11 };
12
13 Array.from(s).forEach((e, i) => {
14 result.push(arr[e]);
15 });
16
17 for (let j = 0; j < s.length ; j++) {
18 result = result.filter((element, index, array) => {
19 if (!(array[index] === array[index+1]+1) && !(array[index] === array[index-1]-1)){
20 return element
21 }
22 });
23 if (!result[0]) {
24 break;
25 }
26 }
27
28 return !result[0];
29 }
4개의 요소를 가진 스트링값을 인자로 전달한 isValid 홈수를 호출해서 확인해보자!
17 for (let j = 0; j < s.length ; j++) {
18 result = result.filter((element, index, array) => {
19 if (!(array[index] === array[index+1]+1) && !(array[index] === array[index-1]-1)){
20 return element
21 }
22 });
23 if (!result[0]) {
24 break;
25 }
26 console.log(result)
27 }
//함수호출문
console.log(isValid("{[]}"))
break를 포함 한 반복문
23 if (!result[0]) {
24 break;
25 }
// console.log(result)의 결과
// [ 2, 1 ]
// true
break가 없는 반복문
~~23 if (!result[0]) {
24 break;
25 }~~
// console.log(result)의 결과
//[ 2, 1 ]
//[]
//[]
//[]
//true
첫풀이
리팩토링된 풀이