์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 30
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ - ๊ธฐ์ด
- ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ - ํต์ฌ
์๊ณ
1์์ 8 ์์๋๋ก(์ค๋ฆ์ฐจ์)๋ผ๋ฉด ascending,
8์์ 1 ์์๋๋ก(๋ด๋ฆผ์ฐจ์)๋ผ๋ฉด descending,
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ mixed๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์
l = list(map(int, input().split(' ')))
asc, desc = True, True
for i in range(1, 7):
if l[i] > l[i + 1]:
asc = False
if desc == False:
break
elif l[i] < l[i + 1]:
desc = False
if asc == False:
break
if asc:
print('ascending')
elif desc:
print('descending')
else:
print('mixed')
์์ฐจํ์์ ํ๋ฉด์,
์ค๋ฆ์ฐจ์ ๊ตฌ์กฐ๊ฐ ๊นจ์ง๋ฉด, asc = False
๋ด๋ฆผ์ฐจ์ ๊ตฌ์กฐ๊ฐ ๊นจ์ง๋ฉด, desc = False
์ด๋ฌํ ์ฐ์ฐ์ ํ๋๋ก ํ๋ค.
if desc == False, if asc == False
๋ ์ค๊ฐ์ ๋์ด์ง๋๋ก ๊ตฌํํ๋๋ฐ, ๊ตณ์ด ์ํด๋ ๋๋ ๋ถ๋ถ์ด๋ค.
๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋๋ฉด asc, desc์ ์ํ์ ๋ฐ๋ผ์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
๋ธ๋์ญ
์นด๋์ ๊ฐฏ์ N๊ณผ ํ๋ M, N์ฅ์ ์นด๋์ ์จ์ ธ ์๋ ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋,
M์ ๋์ง ์์ผ๋ฉด์ M์ ์ต๋ํ ๊ฐ๊น์ด ์นด๋ 3์ฅ์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ๋ค.
n, m = list(map(int, input().split(' ')))
cards = list(map(int, input().split(' ')))
v = 0
for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
curval = cards[i] + cards[j] + cards[k]
if v < curval and curval <= m:
v = curval
print(v)
3์ฅ์ ๊ณ ๋ฅด๊ณ , ๊ทธ ํฉ์ด m๋ณด๋ค ์๊ณ v๋ณด๋ค ํฌ๋ฉด v๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
์คํ ์์ด
n์ด ์ฃผ์ด์ง๋, 1๋ถํฐ n๊น์ง ์คํ์ push, pop๋ฅผ ํตํด ์ฃผ์ด์ง ์์ด์ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๊ตฌํ๋ ๋ฌธ์ ๋ค.
n = int(input())
nval = 1
s = []
result = ""
for i in range(n):
v = int(input())
while v >= nval:
s.append(nval)
nval += 1
result += '+\n'
if s[-1] != v:
result = "NO"
break
s.pop()
result += '-\n'
print(result)
์์๋๋ก ๋ฃ๊ธฐ ์ํ nval(pushํ ๋๋ง๋ค ์ฆ๊ฐ),
์์ด์ ๋ค์ ์์ ์
๋ ฅ๋ฐ๊ธฐ ์ํ v,
์์ด์ ๋ค์์ผ๋ก ๋ค์ด๊ฐ ๊ฐ(nval)์ด ๋ค์ ์(v)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด pushํ๋๋ก ํ๋ค.
nval๊ณผ v๊ฐ ๊ฐ์๋ ๊น์ง pushํ๊ณ popํ๋ฉด ๋ฐ๋ก v๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๋, v๊ฐ nval๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ v๊ฐ ์ด์ ์ ์คํ์ ๋จ์์๋ ๊ฐ์ด ๋์ด์ผ ํ๋ฏ๋ก s[-1]์ ํตํด์ ํ์ธํ๊ณ ,
๋ค๋ฅธ ๊ฒฝ์ฐ NO๋ฅผ ์ถ๋ ฅํ๊ณ ์ข
๋ฃํ๋๋ก ํ๋ค.
๊ฐ์ ๊ฒฝ์ฐ์๋ popํ๋๋ก ํ๋ค.
NO๋ฅผ No๋ก ์ถ๋ ฅํด์ ์์ฒญํ๋ ธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ชป๋ฌ๋??ํ๊ณ ํ์ฐธ๋ดค๋ค..ใ
ใ
(boj ๋๋ฌด ์ค๋๋ง์ด๋ผ์ ์ด๋ฐ ์ค์๋ ํ๋ค.)
์์ ์ c++๋ก ํ์๋ ๋ฌธ์ ์ธ๋ฐ, ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์๋ฐ ์ธ์ด๋๋ฌธ์ธ์ง ์๊ฐ์ด ์์ฒญ ์ฐจ์ด๋๋ค.
ํ๋ฆฐํฐํ
- ํ์ฌ Queue์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์์ โ์ค์๋โ๋ฅผ ํ์ธํ๋ค.
- ๋๋จธ์ง ๋ฌธ์๋ค ์ค ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ์ด ๋ฌธ์๋ฅผ ์ธ์ํ์ง ์๊ณ Queue์ ๊ฐ์ฅ ๋ค์ ์ฌ๋ฐฐ์น ํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ก ์ธ์๋ฅผ ํ๋ค.
์ด ๋ ๋ฌธ์ฅ์ ์ง์ ๊ตฌํํ๋ ๋ฌธ์ ๋ค.
์ฒ์ ๋ณด๊ณ ์ฐ์ ์์ ํ?? ๋ผ๋ ์๊ฐ์ด ๋ค ์ ์๋๋ฐ,
๋ฌธ์์ ์ $N < 100$, ์๊ฐ์ ํ 2์ด๋ก ๊ทธ๋ฅ ํ๋ก ์ ๋ฌธ์ฅ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
import queue
tc = int(input())
for t in range(tc):
n, m = list(map(int, input().split(' ')))
l = list(map(int, input().split(' ')))
cnt = 1
pq = queue.PriorityQueue()
q = queue.Queue()
for i in range(n):
val = l[i]
q.put((val, True if i == m else False))
pq.put((-val, val))
while not q.empty():
while pq.queue[0][1] > q.queue[0][0]:
q.put(q.get())
if q.get()[1] == True:
print(cnt)
break
pq.get()
cnt += 1
์ฐ์ ์์ ํ์ ํ๋ฅผ ์ฌ์ฉํด์
์ฐ์ ์์ ํ๋ก๋ ํ์ฌ ํ๋ณด๋ค ๋ ์ฐ์ ์์๊ฐ ๋์ ๊ฐ์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จ(์๊ฐ์ด ๋๋ํด์ ๋งค๋ฒ ํ์ํด๋ ๋์ง๋ง ๊ท์ฐฎ์์..),
ํ๋ ์ถ๋ ฅํ๋ ์์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
ํค๋ก๊ฑฐ
์ด ๋ฌธ์ ๋ ํ์ด๋ณด์
๋๊ธ๋จ๊ธฐ๊ธฐ