28.5K
이전 글(자바스크립트에서의 자료구조)에서 자바스크립트 개발자가 스택, 리스트, 큐 등 컴퓨터 과학의 고전적인 자료 구조에 대한 구현 방법을 배우는 것이 왜 중요한 지에 대해 설명했다. 또한 해결하고자 하는 문제가 특정한 자료 구조를 암시하고 있어서 문제를 표현하는 어떤 알고리즘으로 귀결되는 경우가 얼마나 많은지에 대해서도 설명했다. 이번에는 바로 그런 경우에 대한 예를 들어 보려고 한다.
자바스크립트의 배열로 스택 만들기
var letters = []; // this is our stack
var rword = "";
putstr("Enter a word: ");
var word = readline();
for (var i = 0; i < word.length; i++) {
rword += letters.pop(); // pop off the stack in reverse order
}
if (rword === word) {
print(word + " is a palindrome.");
}
else {
print(word + " is not a palindrome.");
}
다음은 위의 프로그램을 실행시켜 본 몇 가지 예이다.
Enter a word: bob bob is a palindrome. Enter a word: racecar racecar is a palindrome. Enter a word: hello hello is not a palindrome.위의 프로그램은 단어만을 처리하는 데 문장을 처리하도록 바꿔 볼 수도 있을 것이다.이를 테면, 공백을 제거하고 나면 ""a man a plan a canal panama"는 회문이 된다. 이번에는 문장에서 공백을 제거하고 난 다음에 스택에 넣는 형태로 앞에서 만든 프로그램을 확장해 보자.
var letters = [];
var rword = "";
putstr("Enter a sentence: ");
var sentence = readline();
var sword = "";
for (var i = 0; i < sentence.length; i++) {
if (sentence[i] == " ") {
;
}
else {
sword += sentence[i];
}
}
for (var i = 0; i < sword.length; i++) {
letters.push(sword[i]);
}
while (letters.length > 0) {
rword += letters.pop();
}
if (rword === sword) {
print(sentence + " is a palindrome.");
}
else {
print(sentence + " is not a palindrome.");
}
다음은 확장된 프로그램을 실행하여 문장을 입력해 본 예이다.
Enter a sentence: a man a plan a canal panama amanaplanacanalpanama is a palindrome. Enter a sentence: now is the time for all good people nowisthetimeforallgoodpeople is not a palindrome.물론, 스택을 사용하지 않고도 회문을 처리하기 위한 프로그램을 만드는 방법이 여러 가지 있을 것이다. 그리고, 위의 방법이 가장 간단한 형태로 프로그램을 만드는 방법도 여러 가지 있을 것이다. 그러나, 스택의 동작에 대해서 이해하고 있는 프로그래머라면, 주어진 데이터의 역순으로 어떤 작업을 처리해야 한다라는 문제를 만나게 되면 스택으로 처리할 수 있겠구나 하는 감을 잡을 수 있을 것이다. 물론 스택만 이런 장점을 제공하는 유일한 자료 구조는 아니다. 다양한 형태의 자료 구조와 자료 구조의 활용 방법에 대한 잘 알고 있는 자바스크립트 프로그래머라면, 매일 매일 작업에서 만나게 되는 여러 문제에 대한 풍부한 해결책을 가지고 있는 것과 같다.
댓글