ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 의사코드로 알고리즘 문제를 해결하는 방법
    concept/data structure 2020. 3. 30. 18:58

     

    예를 들어 텍스트에서 foo라는 단어를 찾아 전부 다른 단어로 바꿔주는 코드를 작성한다고 가정해본다.

    다음은 pseudocode의 예제이다.

    • 텍스트를 입력으로 받는다
      • foo라는 단어를 찾는다
      • 그 단어를 지운다
      • 그 자리에 새로운 단어를 넣는다
    • 바뀐 내용을 리턴한다

    아래는 코드로 작성한 예제 이다.

    function replaceFoo(text) {
      // foo라는 글자의 index가 -1이 아니면 단어를 찾은 것이다
      while( text.indexOf('foo') !== -1 ) { // index를 발견하면
        let index = text.indexOf('foo');
    
        // index를 이용해 foo 바로 앞까지의 텍스트를 얻어내고
        let beforeText = text.slice(0, index);
        // foo 대신 새로운 단어를 넣는다
        let replaceText = 'BAR';
        // foo 이후의 텍스트를 넣는다
        let afterText = text.slice(index + 3); // 'foo'는 세 글자이므로 3을 더함
    
        text = beforeText + replaceText + afterText;
      }
    
      return text; // 바뀐 내용을 리턴한다
    }

     

    이것을 함수를 쪼개어서 findFoo(text); replaceFoo(text); 로 작성해보자.

     

    function findFoo(text){
    //foo의 인덱스를 찾는다.
      return text.indexOf('foo');
    }
    
    function replaceFoo(text){
      while(findFoo(text) !== -1){
        let index = findFoo(text);
            // index를 이용해 foo 바로 앞까지의 텍스트를 얻어내고
        let beforeText = text.slice(0, index);
        // foo 대신 새로운 단어를 넣는다
        let replaceText = 'BAR';
        // foo 이후의 텍스트를 넣는다
        let afterText = text.slice(index + 3); // 'foo'는 세 글자이므로 3을 더함
    
        text = beforeText + replaceText + afterText;
      }
      return text;
    }
    

     

    foo 뿐만이 아닌 다른 단어들에게도 사용할 수 있도록 함수를 변형시켜 보자.

     

    function find(text, searchString){
    //searchString의 인덱스를 찾는다.
      return text.indexOf(searchString);
    }
    
    function replace(text, searchString, replaceString){
      while(find(text, searchString) !== -1){
        let index = find(text, searchString);
            // index를 이용해 searchString 바로 앞까지의 텍스트를 얻어내고
        let beforeText = text.slice(0, index);
        // searchString 대신 새로운 단어를 넣는다
        let replaceText = replaceString;
        // searchString 이후의 텍스트를 넣는다
        let afterText = text.slice(index + searchString.length); // 'searchString'의 길이만큼 더함
    
        text = beforeText + replaceText + afterText;
      }
      return text;
    }

     

    'concept > data structure' 카테고리의 다른 글

    time complexity (시간 복잡도)  (0) 2020.05.16
    Graph, Tree, BST  (0) 2020.05.10
    hash table (해시테이블)  (0) 2020.05.10
    Data structure : 자료구조 (stack, queue)  (0) 2020.05.02

    댓글

Designed by Tistory.