Baekjoon [BaekJoon] 4889 번 안정적인 문자열 문제 - (nodejs) - 728x90 문제 번호 : 4889번문제 바로가기 ☞ https://www.acmicpc.net/problem/4889 <<< 문제 내용 >>> const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); for(let i in input){ let temp = input[i].split(''); let arr = []; let cnt = 0; if(temp[0] === '-') break; for(let j in temp){ if(temp[j] === '{'){ arr.push(temp[j]); } else{ if(arr[arr.length-1] === '{'){ arr.pop(temp[j]); } else{ arr.push(temp[j]); } } } while(arr.length){ let index = arr.pop(); if(index === arr[arr.length-1]){ arr.pop(); cnt += 1; }else{ arr.pop(); cnt += 2; } } console.log(Number(i)+1+'. '+cnt); } [1번째 풀이] 스택에 우선 { 와 }를 담습니다. 담을 때 }면 바로 앞에 {가 있는지 확인 후 있다면 pop으로 둘다 담지 않습니다. 우선적으로 처리 후 스택이 빌때까지 마지막 2개씩 비교하면서 만약 두개의 모양이 같으면 1개만, 다르면 2개씩 바꾸면서 처리합니다. (문제가 짝수이기 때문에 가능) const fs = require('fs'); const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; let input = fs.readFileSync(filePath).toString().trim().split('\n'); for(let i in input){ let temp = input[i].split(''); let arr = []; let cnt = 0; if(temp[0] === '-') break; for(let j in temp){ if(temp[j] === '{') arr.push(temp[j]); else{ if(!arr.length){ arr.push('{'); cnt++; }else{ arr.pop(); } } } console.log((Number(i)+1)+'. '+(cnt + arr.length/2)); } [2번째 풀이] 다른 사람의 정답을 보니, 스택이 비었을때 }가 오면 {로 변경하고 변경횟수를 더하고, 스택이 있을때 }가 오면 비워줍니다. 반복문이 끝나고도 남아있는 arr의 개수( '{' 만 남아있음 )와 cnt의 개수를 이용하여서 출력합니다. 이 방법이 조금 더 깔끔하고 좋네요. 도움이 되셨다면 공감 부탁드립니다. 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기MoveRoad's Factory 저작자표시 (새창열림) Contents 당신이 좋아할만한 콘텐츠 [BaekJoon] 1655번 가운데를 말해요 문제 - (nodejs) 2022.01.10 [BaekJoon] 10815 번 숫자 카드 문제 - (nodejs) 2022.01.08 [BaekJoon] 1662 번 압축 문제 - (nodejs) 2022.01.07 [BaekJoon] 10799 번 쇠막대기 문제 - (nodejs) 2022.01.06 댓글 0 + 이전 댓글 더보기