https://www.acmicpc.net/problem/12904
//test.txt
B
ABBA
sol1 - ❌
let [S,T] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
let arr = S.split('');
function solution(arr,T) {
while(T.length !== arr.length) {
arr.push('A');
if(T.length === arr.length) break;
arr.reverse().push('B');
arr.push("A");
}
return arr.join('') === T ? 1 : 0
};
console.log(solution(arr,T));
//1
S에 문제의 조건인 A를 추가하고, 뒤집은 후 B를 추가하는 식으로 해결했다. push()를 쓰기 위해 split으로 문자열을 배열로 바꿔주었고, T의 문자열 길이와 같아질 때까지 반복한 뒤 S와 T가 같은지 비교했다. 테스트 케이스는 통과했지만 제출 시 60%쯤에서 틀리게 된다. 이런저런 입력을 줘봤지만 어느 부분이 예외인지 찾지 못해서, sol2로 해결했다. 오히려 틀린다면 시간초과가 날 줄 알았는데 모르겠다,,
sol2
let [S,T] = require('fs').readFileSync('test.txt').toString().trim().split('\n');
function solution(S,T) {
S = S.split('');
T = T.split('');
let sLen = S.length;
let tLen = T.length;
for(let i=tLen-1;i>=sLen;i--) {
if(T[i] === "B") {
T.pop();
T.reverse();
};
if(T[i] === "A") T.pop();
};
return T.join('') === S.join('') ? 1 : 0;
};
console.log(solution(S,T));
//1
sol1 과는 역으로 T에 조건이 맞도록 줄여갔다. T배열을 뒤에서부터 돌며 A를 만나면 제거하고 B를 만나면 제거한 후 뒤집었다. 배열(Object)끼리 동일한지 비교가 안되기 때문에 다시 문자열로 바꿔서 비교해주었다.
'Study > Algorithm' 카테고리의 다른 글
[BEAKJOON / node.js] 1302 베스트셀러 (0) | 2022.06.21 |
---|---|
[BEAKJOON / node.js] 1744 수 묶기 (0) | 2022.06.17 |
[BEAKJOON / node.js] 9935 문자열 폭발 (0) | 2022.06.15 |
[programmers / JavaScript] JadenCase 문자열 만들기 (0) | 2022.06.14 |
[BEAKJOON / node.js] 1920 수 찾기 (2) | 2022.06.12 |