/**
* @param {string} s
* @return {number[]}
*/
var diStringMatch = function (s) {
let answer = [];
let j = 0;
let k = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === 'I') {
answer.push(j);
j++;
} else {
answer.push(s.length - k);
k++;
}
}
s[s.length - 1] === 'I' ? answer.push(answer[answer.length - 1] + 1) : answer.push(answer[answer.length - 1] - 1);
return answer;
};
let s = 'IDID';
diStringMatch(s);
// 다른 사람의 풀이
const diStringMatch = (S) => {
let num = [];
let inc = 0;
let dec = S.length;
let i = 0;
while (num.length !== S.length + 1) {
num[i] = S[i] === 'D' ? dec-- : inc++;
i++;
}
return num;
};
문제는 0과 s.length
사이의 숫자들을 I(=0일 때)
와 D(s.length일 때)
가 나올 때를 구분하여 넣어주는 것이다.
두 개의 포인터 j, k
를 사용하여 s[i] === 'I'
일 경우에 j
를 더해주고, 반대의 경우에는 k
를 더해주면서 s
의 길이에서 그만큼 빼줬다.
Discussion에서는 answer
배열에 직접 push를 하는 것이 아닌 해당 인덱스의 요소를 그대로 변환 시키는 형태로 만들었다.
수정, 지적을 환영합니다!
https://leetcode.com/problems/di-string-match/