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
: 전역 검색