오늘도 HTML5와 CSS만 공부하다가 내 뇌 용량 속에서 파이썬이 밀려날까봐 급하게 쉬운 문제 하나 풀어본다.
문제 풀이
문제 해석
palindrome은 역순으로 나열해도 같은 형태를 갖는 글자 또는 숫자이다. (검색해보니 우리말로 회문이라고 한다던데 처음 들어보는 말이다. 어렸을 때 소주만병만주소, 다시합창합시다 등의 문장으로 말장난 했던 기억은 난다.)
이 palindrome을 판별하는 클래스를 만들어보는 문제이다.
Task
stack
과queue
의 역할을 할 두 개의 instance variable을 만들어라.pushCharacter(char ch)
라는 메소드로 stack에 글자를 쌓게 하고,enqueueCharacter(char ch)
라는 메소드로 문자를 queue에 순서대로 넣게 해라.popCharacter()
로 stack 맨 위에 쌓여있는 글자(즉 마지막 글자)를 리턴시키고,dequeueCharacter()
라는 메소드로 queue에 있는 첫번째 글자를 리턴시킨다.
Input Format
- 친절한 HackerRank 말하길 “넌 그냥 클래스나 만드렴, 한 줄의 문자열 s는 내가 코딩해서 넣어줄게”
Output Format
- 친절한 HackerRank 또 말하길 “넌 그냥 클래스에서 메소드나 만들어, palindrome 판단하는 output 코딩은 내가 책임진다.”
문제 풀이
이미 주어진 코드 해석
1 | s=input() #인풋이 s라는 변수에 할당 |
마지막에 palindrome인 경우와 아닌 경우의 출력문까지 세팅이 준비되어 있다.
코드 작성하기
- stack은 가장 나중에 넣은 글자가 위에 쌓이고(LIFO, Last In First Out), queue는 가장 먼저 넣은 글자 순서대로(FIFO, First In First Out) 튀어나와야 한다.
- 서로 다른 방법으로 접근해야 하나 싶겠지만, 둘다 빈 list로 instance variable을 만들어두고 리스트 메소드
pop(index)
에 index값을 주면 간단히 해결.- 생성자로 빈 stack과 queue 리스트를 만든다.
append()
로 집어넣는 메소드를,pop()
으로 튀어나오는 메소드를 만들어준다.pop()
을 인자 없이 넣으면 마지막에 넣은 값이 튀어나오는 게 default1
2
3
4
5
6
7
8
9
10
11
12class Solution:
def __init__(self):
self.stack = []
self.queue = []
def pushCharacter(self, c):
self.stack.append(c)
def enqueueCharacter(self, c):
self.queue.append(c)
def popCharacter(self):
return self.stack.pop(0)
def dequeueCharacter(self):
return self.queue.pop()
느낀 점
아주 쉬워서 그닥 푼 느낌이 나지 않지만 그래도 파이썬과 더 멀어지지 않았다는 것에 의의를.