-
의사코드로 알고리즘 문제를 해결하는 방법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 - 텍스트를 입력으로 받는다