본문 바로가기
Project/JavaScript

[JavaScript 프로젝트 : 공학용 계산기] 문자열 시작, 끝 검색

by 꾸압 2022. 1. 18.

 

[문제 제기] : 코드에 기능이 더해져 길어질 수록, 논리가 엉켜서 기능을 더 넣기 어려웠다.

그래서 생각했다.

(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

댓글