반응형

문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 

100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

반응형

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제 입력 1 

14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
예제 출력 1 
2
2
0
2
1
-1
0
1
-1
0
3

 

예제 입력 2 
7
pop
top
push 123
top
pop
top
pop

예제 출력 2 

-1
-1
123
123
-1
-1

 

 
위 문제를 파이썬으로 구현한 결과입니다.
단, 다른 언어를 쓰는 분들도 참고 할 수 있도록 몇가지 파이썬 내장함수를 사용하지 않고 직접 구현하는 방법으로 진행하였습니다.
 
Stack 클래스를 정의해놨기 때문에 이후 다른 문제를 풀때 활용하면 되겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#Stack class 정의
class Stack:
    def __init__(self):
        self.len = 0
        self.list = []
        
    def push(self, num):
        self.list.append(num)
        self.len += 1
    
    def pop(self):
        if self.size() == 0:
            return -1
        pop_result = self.list[self.len - 1]
        del self.list[self.len - 1]
        self.len -= 1
        return pop_result
        
    def size(self):
        return self.len
        
    def empty(self):
        return 1 if self.len == 0 else 0
        
    def top(self):
        return self.list[-1if self.size() != 0 else -1
        
 
num = int(input())
stack = Stack()
while(num > 0):
    num -= 1
    input_split = input().split()
 
    op = input_split[0]
 
    if op == "push":
        stack.push(input_split[1])
    elif op == "pop":
        print(stack.pop())
    elif op == "size":
        print(stack.size())
    elif op == "empty":
        print(stack.empty())
    elif op == "top":
        print(stack.top())
    else:
        print("unacceptable op")
cs

 

반응형
반응형

* 이 게시글은 인사이트에서 출판한 "Programming Ruby"를 참고하여 작성되었습니다.


  해시(Hash)는 연관 배열, 사전(dictionary)라고도 불립니다.


배열과 비슷하지만 배열은 index를 이용하여 객체를 참조하지만,


해시는 어떠한 객체라도 index로 사용이 가능합니다.


예를 들어서 배열은 아래와 같이 사용합니다.


array[0] #=> 1

array[1] #=> 2

array[2] #=> 3

#[ 1, 2, 3]


여기서 index로 사용된 0, 1, 2 의 경우는 배열에 순서에 따라서 자동으로 매겨지죠.



그리고 해시의 경우 아래와 같이 사용 할 수 있습니다.


hash['dog'] #=> "animal"

hash['laptop'] #=> "electronic"

hash['cat'] #=> "animal"

#{ "dog"=>"animal", "laptop"=>"electronic", "cat"=>"animal" }


위에 예에서는  key, value 모두 String으로 사용하였습니다.


array에서 0, 1, 2를 index라고 부르고, hash에서는 key 라고 부릅니다.


dog, laptop, cat은 문자열로 되어있는 key인거죠.



Hash 사용방법


Hash를 생성하는 방법은 배열과 같이 2가지가 있습니다.


#리터럴를 이용하는 방법

h = { 'dog' => 'animal', 'cat' => 'animal', 'laptop' => 'electronic' }


#명시적으로 Hash 클래스의 인스턴스를 만드는 방법

h = Hash.new(0)


Array와 마찬가지로 key, value 의 객체는 어떠한 객체라도 넣을 수 있습니다.


h = { 'dog' => 'animal', 'cat' => 'animal', 'laptop' => 'electronic' }


h[123] = 123


h #=> { "dog"=>"animal", "cat"=>"animal", "laptop"=>"electronic", 123 => 123}


Symbol


Ruby에서 Hash를 사용할때 Symbol을 key값으로 사용하면 매우 유용합니다.


Symbol에 대해서는 나중에 따로 게시글을 작성하겠습니다.


h = { dog: "animal", cat: "animal", laptop: "electronic" }


h[:dog] #=> "aniamal"


h[:cat] #=> "animal"

*여기서 사용되는 :dog 는 Symbol입니다. 위에 다른 예제에서 사용된 String과는 다릅니다.



반응형

+ Recent posts