sevenAte9.js (7kyu 66)

Codewars 알고리즘 풀이


Problem

  • Write a function that removes every lone 9 that is inbetween 7s.
    • 7 사이에 있는 9를 제거하는 함수를 작성한다.


Solution 01

function sevenAte9(str) {
  let arr = str.split('');
  
  for (let i = 1; i < arr.length - 1; i++) {
    if (arr[i - 1] === '7' && arr[i] === '9' && arr[i + 1] === '7') {
      arr.splice(i, 1);
    }
  }
  return arr.join('');
}

sevenAte9('797');      // 77
sevenAte9('79797');    // 777
sevenAte9('9799797');  // 979977

split(): 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.

splice(): 배열에 item을 추가/제거한 후, 제거된 item을 반환한다.

join(): 배열의 모든 element를 결합하고, 새 문자열로 반환한다.


Solution 02

function sevenAte9(str) {
  while (true) {
    if (str.search('797') !== -1) {
      str = str.replace('797', '77');
    } else {
      break;
    }
  }
  return str;
}

sevenAte9('797');      // 77
sevenAte9('79797');    // 777
sevenAte9('9799797');  // 979977

search(): 문자열에서 지정된 값을 검색하고, 일치하는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.

replace(): 대응되는 문자열을 찾아 다른 문자열로 치환한다.


Solution 03

function sevenAte9(str) {
  return str.replace(/79(?=7)/g, '7');
}

sevenAte9('797');      // 77
sevenAte9('79797');    // 777
sevenAte9('9799797');  // 979977

x(?=y): y가 뒤따라오는 x에 대응

g: 전역 검색