Group Study (2022-2023)/Coding Test

[Coding Test] 1์ฃผ์ฐจ - Data Structure1 (์Šคํƒ, ํ, Deque)

์šฐ์ฃผํ˜ธ 2023. 1. 22. 15:46

๐Ÿ’—10799 ์‡ ๋ง‰๋Œ€๊ธฐ

https://www.acmicpc.net/problem/10799

 

10799๋ฒˆ: ์‡ ๋ง‰๋Œ€๊ธฐ

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ๋ ˆ์ด์ €๋กœ ์ ˆ๋‹จํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํšจ์œจ์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด์„œ ์‡ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ฒน์ณ ๋†“๊ณ , ๋ ˆ์ด์ €๋ฅผ ์œ„์—์„œ ์ˆ˜์ง์œผ๋กœ ๋ฐœ์‚ฌํ•˜์—ฌ ์‡ ๋ง‰๋Œ€๊ธฐ๋“ค์„ ์ž๋ฅธ๋‹ค. ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €

www.acmicpc.net

[ ํ’€์ด ]

์Šคํƒ ์ด์šฉ

  1. "(" ์ผ ๊ฒฝ์šฐ ์Šคํƒ์— ์ผ๋‹จ append
  2. ")"์ผ ๊ฒฝ์šฐ ๋ ˆ์ด์ €์ธ์ง€ ์•„๋‹Œ์ง€ ๊ตฌ๋ถ„ํ•ด์•ผํ•จ
  3. ")"์ผ ๋•Œ ๋ฐ”๋กœ ์ด์ „ ๋ฌธ์ž๊ฐ€ "("๋ผ๋ฉด ๋ ˆ์ด์ €์ด๋ฏ€๋กœ ์Šคํƒ ๊ธธ์ด๋งŒํผ ์‡ ๋ง‰๋Œ€๊ธฐ ๊ฐœ์ˆ˜ ๋”ํ•˜๊ธฐ
  4. ๋ฐ”๋กœ ์ด์ „ ๋ฌธ์ž๊ฐ€ "(" ๊ฐ€ ์•„๋‹ˆ๋ผ ")"๋ผ๋ฉด ์‡ ๋ง‰๋Œ€๊ธฐ์ด๋ฏ€๋กœ +1

[ ์ฝ”๋“œ ]

steel = list(input())
stack = []
result = 0
for i in range(len(steel)):
    if steel[i] == '(':
        stack.append('(')
    else:
        if steel[i-1] == '(':
            stack.pop()
            result += len(stack)
        else:
            stack.pop()
            result += 1

print(result)

๐Ÿ’—1158 ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ

https://www.acmicpc.net/problem/1158

 

1158๋ฒˆ: ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

[ ํ’€์ด ]

deque ์ด์šฉ

  1. ์‚ฌ๋žŒ ์ˆ˜ ๋งŒํผ deque(circle)์— 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ €์žฅ
  2. circle์—์„œ k๋ฒˆ์งธ ์‚ฌ๋žŒ์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด k-1๊นŒ์ง€๋Š” popleftํ•œ ๋‹ค์Œ ๋‹ค์‹œ append
  3. ๋งˆ์ง€๋ง‰ k๋ฒˆ์งธ๋Š” popleftํ•˜๊ณ  ์ •๋‹ต ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€

[ ์ฝ”๋“œ ]

from collections import deque

n, k = map(int, input().split())
circle = deque([i for i in range(1, n+1)])
result = []
while len(circle) != 0:
    cnt = k
    while cnt != 1:
        circle.append(circle.popleft())
        cnt -= 1
    x = circle.popleft()
    result.append(x)

print("<", end="")
print(*result, sep=", ", end="")
print(">")

๐Ÿ’—1966 ํ”„๋ฆฐํ„ฐํ

https://www.acmicpc.net/problem/1966

 

1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ

์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์—

www.acmicpc.net

[ ํ’€์ด ]

m์ด ๋น ์ ธ๋‚˜์˜จ ๊ฒƒ์„ -1์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  -1์ด ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ๊ณผ์ • ์ง„ํ–‰

  1. ์ค‘์š”๋„ ์ˆœ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด ๋งจ ์•ž์— ์žˆ์œผ๋ฉด ์‚ญ์ œ
    • result(m์ด ๋ช‡ ๋ฒˆ์งธ์— ๋น ์ ธ๋‚˜๊ฐ€๋Š”์ง€ ์นด์šดํŠธ) ์ฆ๊ฐ€
  2. ์ค‘์š”๋„๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด ๋งจ ์•ž์— ์žˆ์ง€ ์•Š์œผ๋ฉด ๋งจ ๋’ค๋กœ ๋ณด๋‚ด๊ณ  ์‚ญ์ œ
    • ๋งจ ๋’ค๋กœ ๋ณด๋‚ผ๋•Œ m์ด ์–ด๋””์— ์žˆ์—ˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด m์œ„์น˜๋„ ์กฐ์ •

[ ์ฝ”๋“œ ]

t = int(input())
for i in range(t):
    n, m = map(int, input().split())
    star = list(map(int, input().split()))
    result = 0
    while m != -1:
        if star[0] == max(star):
            del star[0]
            m -= 1
            result += 1
        else:
            star.append(star[0])
            del star[0]
            if m == 0:
                m = len(star) - 1
            else:
                m -= 1

    print(result)

๐Ÿ’—9012 ๊ด„ํ˜ธ

https://www.acmicpc.net/problem/9012

 

9012๋ฒˆ: ๊ด„ํ˜ธ

๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Parenthesis String, PS)์€ ๋‘ ๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ์ธ ‘(’ ์™€ ‘)’ ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ๊ทธ ์ค‘์—์„œ ๊ด„ํ˜ธ์˜ ๋ชจ์–‘์ด ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Valid PS, VPS)์ด๋ผ๊ณ 

www.acmicpc.net

[ ํ’€์ด ]

์Šคํƒ ์ด์šฉ

  1. ๋ฌธ์ž์—ด์„ ๋ฐ›์€ ํ›„ "("๋ผ๋ฉด ์ผ๋‹จ ์Šคํƒ์— append
  2. ")"๋ผ๋ฉด ์Šคํƒ์—์„œ popํ•˜๋Š”๋ฐ ์Šคํƒ์ด ๋น„์—ˆ๋‹ค๋ฉด ๋ฐ”๋กœ NO์ถœ๋ ฅ
  3. ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋Œ์•˜์„ ๋•Œ ์Šคํƒ์ด ๋น„์—ˆ๋‹ค๋ฉด YES์ถœ๋ ฅํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด NO์ถœ๋ ฅ

[ ์ฝ”๋“œ ]

t = int(input())
for _ in range(t):
    stack = []
    s = input()
    for j in s:
        if j == "(":
            stack.append(j)
        else:
            if stack:
                stack.pop()
            else:
                print("NO")
                break
    else:
        if not stack:
            print("YES")
        else:
            print("NO")