[BOJ] 1874. ์คํ์์ด(python)
๐๋ฌธ์
๐ช์์ด๋์ด
- ์ฃผ์ด์ง ์์ด ๋ง๋ค ์ ์๋์ง ๊ฒ์ฌ
max ๊ฐ์ ํด๋น ์ธ๋ฑ์ค์ ์์ด๊ฐ์ ๊ฐฑ์ ํด ๊ฐ๋ฉด์ ๊ฒ์ฌํด ์คฌ๋ค. max์ ์ต๋๊ฐ์ n์ด๋ค.
n์ ๋๋ฌํ๋ฉด ๊ทธ๋ค์๋ถํฐ๋ ์์ ์๊ฐ ๋์ฌํ ๋๊น max๊ฐ์ stack์ ๋งจ ์์ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๊ฐ๋ฉด์ True,False๊ฒ์ฌํ๋ ๋ฒ์๋ฅผ ์ค์ฌ์คฌ๋ค.- max๊ฐ๊ณผ ๋น๊ต
- arr[i]>max: arr[i]-max๋งํผ +์ถ๋ ฅํ๊ณ / -์ถ๋ ฅ/ False / max=arr[i]
- arr[i]<max: max๋ณด๋ค ์์ ์๋ค ์ค ์ ์ผ ๊ฐ๊น์ด True ์ฐพ๊ธฐ (j) โ> ์ด j๊ฐ์ด stack[-1]
stack[-1]๊ฐ๊ณผ arr[i]์ด ๋ค๋ฅด๋ฉด stack์ LIFO์ผ๋ก ์ธํด ๋ชป๋ง๋๋ ๋ฐฐ์ด
๊ฐ์ผ๋ฉด False๋ก ๋ฐ๊พธ๊ณ -์ถ๋ ฅ - if max == n: max = j : ๊ฒ์ฌ ๋ฒ์ ์ค์ด๊ธฐ
- arr[i]>max: arr[i]-max๋งํผ +์ถ๋ ฅํ๊ณ / -์ถ๋ ฅ/ False / max=arr[i]
- max๊ฐ๊ณผ ๋น๊ต
๐ฅ์ฝ๋
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
def is_possible(arr,n):
answer = []
nums = [True]*(n+1)
max_val = 0
chk=0
for num in arr:
if max_val < num:
for _ in range(max_val,num):
answer.append('+')
max_val = num
nums[num] = False
answer.append('-')
else:
for i in range(max_val-1,-1,-1):
if nums[i]:
if i==num:
answer.append('-')
nums[i]=False
if max_val==n: chk=1
if chk: max_val=i
break
else: return False
return answer
arr = []
n = int(input())
for _ in range(n):
arr.append(int(input()))
answer = is_possible(arr,n)
if answer:
for a in answer: print(a)
else: print('NO')
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.