[Baekjoon] - 10828. ์Šคํƒ(S4)

์˜ค๋™ํ›ˆยท2021๋…„ 12์›” 28์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
10/58
post-thumbnail

1. Problem ๐Ÿ“ƒ

๐Ÿ“š ์ถœ์ฒ˜ - 10828 - ์Šคํƒ

๋ฌธ์ œ ์„ค๋ช…
์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ๋‹ค์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • top: ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ
์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์งˆ ๋•Œ๋งˆ๋‹ค, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ์˜ˆ์ œ ์ถœ๋ ฅ
--14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
2
2
0
2
1
-1
0
1
-1
0
3
--7
pop
top
push 123
top
pop
top
pop
-1
-1
123
123
-1
-1

2. Logic ๐Ÿ‘จโ€๐Ÿซ

๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ push๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋‹จ์–ด๋Š” ํ•œ ๋‹จ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜์ง€๋งŒ, push์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ex) push 1๊ณผ ๊ฐ™์ด ๋˜์–ด ์žˆ์–ด ์ˆซ์ž๋ฅผ ๋–ผ์–ด๋‚ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋งŒ ์œ ์˜ํ•˜๋ฉด ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Code ๐Ÿ’ป

1. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ ๐Ÿ˜

import sys
input = sys.stdin.readline

def check(stack, word):
    if word == 'top':
        if len(stack) != 0 and stack[-1]:
            print(stack[-1])
        else:
            print(-1)
    elif word == 'size':
        print(len(stack))
    elif word == 'empty':
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif word == 'pop':
        if len(stack) > 0:
            print(stack.pop())
        else:
            print(-1)
    else:
        tmp = int(word.split(' ')[1])
        stack.append(tmp)

N = int(input().strip())
stack = []

for i in range(N):
    word = input().strip()
    check(stack, word)

4. Feedback ๐Ÿ“š

๋‹ค๋งŒ ์ด ๋ฌธ์ œ์—์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. ๋กœ์ง์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ input()๊ณผ sys.stdin.readline์˜ ์ฐจ์ด ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์„ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ คํ•œ๋‹ค.

1. input() vs sys.stdin.readline()

๊ณตํ†ต์ 

  • ๋‘˜ ๋‹ค ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐจ์ด์ 

input()

  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Prompt Message๋ฅผ ๋ฐ›์•„์„œ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    (for๋ฌธ์„ ์‚ฌ์šฉํ•  ์‹œ prompt message๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)
  • ๊ฐœํ–‰๋ฌธ์ž \n๋ฅผ ์‚ญ์ œํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.

sys.stdin.readline()

  • sys ๋ชจ๋“ˆ์€ ํŒŒ์ด์ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • sys.stdin.readline์€ ๊ฐœํ–‰๋ฌธ์ž \n๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ˜•๋ณ€ํ™˜์„ ๊ฑฐ์ณ์„œ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋ฌธ์ œ์—์„œ๋Š” ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋˜์ง€ ์•Š์•„ top๋ฅผ ์ž…๋ ฅํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰ else ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ€ ํ—ค๋งธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ sys.stdin.readline์ด ๊ฐœํ–‰์„ ํฌํ•จํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๊ณ  strip()์„ ์‚ฌ์šฉํ•ด ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

2. strip()

Python์˜ String ์˜ ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ž์ œ๊ฑฐ

  • strip([chars]) : ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž๋ฅผ String์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • lstrip([chars]) : ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž๋ฅผ String์˜ ์™ผ์ชฝ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • rstrip([chars]) : ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž๋ฅผ String์˜ ์˜ค๋ฅธ์ชฝ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด String์—์„œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๊ณต๋ฐฑ(white space) ์ œ๊ฑฐ

text = '   this is gold   '
print('[' + text.rstrip() + ']')
print('[' + text.lstrip() + ']')
print('[' + text.strip() + ']')

-------------------------------------------
# result
[   this is gold]
[this is gold   ]
[this is gold]

๋™์ผํ•œ ๋ฌธ์ž ์ œ๊ฑฐ

์ธ์ž๋กœ ์ „๋‹ฌํ•œ ํ•œ ๋ฌธ์ž์™€ ๋™์ผํ•œ ๊ฐœ์ฒด๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐ, ๋™์ผํ•˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ œ๊ฑฐํ•œ๋‹ค

text = 'aaaafineappleaaaaa'
print(text.rstrip('a'))
print(text.lstrip('a'))
print(text.strip('a'))

-------------------------------------------
# result
[aaaafineapple]
[fineappleaaaaa]
[fineapple]

์ค‘๊ฐ„์— ์žˆ๋Š” a์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ

์—ฌ๋Ÿฌ ๋ฌธ์ž ์ œ๊ฑฐ

์ธ์ž๋กœ ์—ฌ๋Ÿฌ ๋ฌธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๊ทธ ๋ฌธ์ž๋“ค๊ณผ ๋™์ผํ•œ ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ์ œ๊ฑฐ, ๋™์ผํ•˜์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ œ๊ฑฐํ•œ๋‹ค.

text = "rrrrr865.....pretty....rr,,,,"
print(text.lstrip(',865.r'))
print(text.rstrip(',865.r'))
print(text.strip(',865.r'))
print(text.strip(',568.r'))

-------------------------------------------
# result
[pretty....rr,,,,]
[rrrrr865.....pretty]
[pretty]
[pretty]

์œ„์™€ ๋™์ผํ•˜๊ฒŒ ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฌธ์ž์— ๋Œ€ํ•ด์„œ๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€์•Š๋Š”๋‹ค.

  • ๋˜ํ•œ ์ธ์ž๋ฅผ ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด๋กœ ๋ณด๊ธฐ๋–„๋ฌธ์— 865๋ฅผ 8,6,5 ๋”ฐ๋กœ๋”ฐ๋กœ ์ธ์ž๋กœ ๋ณธ๊ฒƒ ์ด๋ฏ€๋กœ 568 ์„ ์ž…๋ ฅํ•˜์˜€์„๋•Œ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ณผ ๋‚˜์˜จ๋‹ค.
  • ๊ณต๋ฐฑ ๋˜ํ•œ ํ•˜๋‚˜์˜ ์š”์†Œ๋กœ ์ธ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— strip(',8 65.r')๋Š” strip(',865.r')์ด๋ผ๋Š” ๊ฒƒ์ด๋ž‘ ๋น„๊ตํ• ๋•Œ ๊ณต๋ฐฑ์ด๋ผ๋Š” ์š”์†Œ๊ฐ€ ๋“ค์–ด๊ฐ„ ๊ฒƒ์œผ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค๐Ÿฅ

0๊ฐœ์˜ ๋Œ“๊ธ€