942. DI String Match

늘보·2021년 8월 18일
0

LeetCode

목록 보기
23/69

💡풀이

/**
 * @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/

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0개의 댓글