[문제 제기] : 코드에 기능이 더해져 길어질 수록, 논리가 엉켜서 기능을 더 넣기 어려웠다.
그래서 생각했다.
(1)애초에 문자열을 입력받을 때,
(2)조건에 따라 문자열을 따로 떼내어
(3)계산한 뒤 본래 문자열의 뺀 index에 return 하고
(4)계산을 반복하자
그러려면 특정 문자열의 '시작 index'와 '끝 index' 부터 찾자.
근데 만약 괄호 ( ) 가 여러개라면? 식이 괄호 안의 괄호라면?
do - while 로 index searching을 반복하자
const str = 'a(ba)bcd(a)ba';
// 초기화
let position = 1;
let indexStartArr = [];
let indexEndArr = [];
let i = 0;
do{
indexStart = str.indexOf('(', position);
console.log('시작 index : ' + indexStart + '\n');
indexStartArr[i] = indexStart;
position += indexStart;
i++;
} while (indexStart !== -1)
// -1 종료 index 제거
indexStartArr.pop();
console.log('\n' + '시작 index 요소 : [' + indexStartArr + ']\n');
// position 초기화
position = 1;
i = 0;
do{
indexEnd = str.indexOf(')', position);
console.log('마지막 index : ' + indexEnd + '\n');
indexEndArr[i] = indexEnd;
position += indexEnd;
i++;
} while (indexEnd !== -1)
// -1 종료 index 제거
indexEndArr.pop();
console.log('\n' + '마지막 index 요소 : [' + indexEndArr + ']\n');
하고보니 코드 구조 중복으로 마음이 불쾌했다...
function을 활용하여 코드 정리를 다시 시도.
<완성본>
const str = 'a(ba)bcd(a)ba';
let indexStartArr = [];
let indexEndArr = [];
const leftParen = '(';
const rightParen = ')';
indexSearch(str, leftParen, indexStartArr);
indexSearch(str, rightParen, indexEndArr);
function indexSearch(letters, parentheses, Arr) {
let position = 1;
let i = 0;
let index = 0;
while(index !== -1){
index = letters.indexOf(parentheses, position);
if(index !== -1) { Arr[i] = index; }
position += index;
i++;
}
console.log('\n' + parentheses + ' index : [' + Arr + ']\n');
}
indexOf, position 참조 : https://hianna.tistory.com/379
'Project > JavaScript' 카테고리의 다른 글
[JavaScript 프로젝트 : 공학용 계산기] 공학용 계산기 upgraded (0) | 2022.01.26 |
---|---|
[JavaScript 프로젝트 : 공학용 계산기] 중복 연산자 제거 (0) | 2022.01.19 |
[JavaScript 프로젝트 : 공학용 계산기] 기본 공학용 계산기 (0) | 2022.01.19 |
[JavaScript 프로젝트 : 공학용 계산기] 삼각함수 계산 (0) | 2022.01.18 |
댓글