๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[Softeer] python [์ธ์ฆํ๊ฐ(4์ฐจ) ๊ธฐ์ถ] ํต๊ทผ๋ฒ์ค ์ถ๋ฐ ์์ ๊ฒ์ฆํ๊ธฐ ๋ณธ๋ฌธ
[Softeer] python [์ธ์ฆํ๊ฐ(4์ฐจ) ๊ธฐ์ถ] ํต๊ทผ๋ฒ์ค ์ถ๋ฐ ์์ ๊ฒ์ฆํ๊ธฐ
์ง์ง์ํ์นด 2023. 1. 7. 00:41<๋ณธ ๋ธ๋ก๊ทธ๋ Softeer์ ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค>
https://softeer.ai/practice/info.do?idx=1&eid=654
โญ ๋ฌธ์
์ธ์ด๋ณ ์๊ฐ/๋ฉ๋ชจ๋ฆฌ
Python 2์ด 1024MB
๋ฌธ์
ํ๋์๋์ฐจ๊ทธ๋ฃน ์ฐ๊ตฌ์์์๋ ์์ง์๋ค์ ํธ์๋ฅผ ์ํด ์ถํด๊ทผ ํต๊ทผ ๋ฒ์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
ํด๊ทผ ์๊ฐ์ด ๋๋ฉด ์ฐ๊ตฌ์ ์ฃผ์ฐจ์ฅ์๋ ์ ๋ง์ ๋ฒ์ค๋ค์ด ์ผ๋ ฌ๋ก ์ฃผ์ฐจ๋์ด ์๋ค. ํด๊ทผ ๋ฒ์ค๋ ๋ฒํธ์์ ๋๋ก ์ถ๋ฐํด์ผ ํ๋๋ฐ, ์ฃผ์ฐจ์ฅ์ ํญ์ด ์ข์ ์์ ๋ฒ์ค๊ฐ ๋ชจ๋ ๋๊ฐ์ผ ๋ค์ ๋ฒ์ค๊ฐ ๋๊ฐ ์ ์๋ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค.
๋ฒ์ค๋ฅผ ์์์ ๋ง๊ฒ ์ถ๋ฐ์ํค๊ธฐ ์ํด, ์ฐ๊ตฌ์ ์ฃผ์ฐจ์ฅ์ ๋ง์ํธ์ ์์ ์ฃผ์ฐจ์ฅ์ ์ถ๊ฐ๋ก ๊ฑด์คํ์๋ค. ์ด๋ ๊ฒ ๋ง๋ ์์ ์ฃผ์ฐจ์ฅ์ ์ถ์ ๊ตฌ๊ฐ ํ๋๋ฐ์ ์๋ ๋ฐ๋ค๊ฐ, ํญ์ด ์ข์์ ์คํ(Stack)์ฒ๋ผ ๋งจ ์ฒ์ ๋ค์ด๊ฐ ๋ฒ์ค๋ ๋งจ ๋ง์ง๋ง์ ๋์ฌ ์ ์๋ค. ๋ํ, ํ ๋ฒ ์์ ์ฃผ์ฐจ์ฅ์ผ๋ก ์ด๋ํ๋ ๋ฒ์ค๋ ๋ค์ ์๋์ ์ฃผ์ฐจ์ฅ์ผ๋ก ์ด๋ํ ์ ์๋ค.
์์ ๊ฐ์ ์ํฉ์์ ํด๊ทผ ๋ฒ์ค๋ฅผ ๋ฒํธ ์์๋๋ก ์ถ๋ฐ์ํค๋ ๋ฌธ์ ๋ ์คํ ์ ๋ ฌ๋ก ๋ชจ๋ธ๋งํ ์ ์๋ค.
์คํ ์ ๋ ฌ์ด๋, a1, a2, ..., an์ ์ ๋ ฌํ ๋, ์์์๋ถํฐ ์์๋๋ก ์คํ์ Pushํ๊ฑฐ๋, ์คํ์์ Popํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ ๊ณจ๋ผ์ ๋ฐ๋ณตํ์ฌ, ์ ๋ ฌ๋ ์์๋ก ์ถ๋ ฅ๋๋๋ก ํ๋ ๊ฒ์ด๋ค. Stack์ ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ(Push) ์๋ฃ๊ฐ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ด์ง๋(Pop) ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ฆ, ์ฃผ์ด์ง ์๊ฐ 3, 1, 2์ ์ธ๊ฐ๋ผ๋ฉด, 3์ Push (์คํ์ 3๋ง ์ ์ฅ๋จ), 1์ Push (์คํ์ 3, 1์ด ์ ์ฅ๋จ), ์คํ์์ Pop ํ์ฌ ์ถ๋ ฅ (์คํ์ ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ 1์ด Pop ๋์ด ์ถ๋ ฅ๋จ), 2๋ฅผ Push, Popํ์ฌ ์ถ๋ ฅ (2๊ฐ ์ถ๋ ฅ๋จ), Popํ์ฌ ์ถ๋ ฅ์ผ๋ก ๋ง์ง๋ง์ผ๋ก 3์ ์ถ๋ ฅํ ์ ์๋ค.
ํ์ง๋ง, ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ด์ ์คํ ์ ๋ ฌ์ ํตํด ์์๋๋ก ์ ๋ ฌํ ์ ์๋ ๊ฒ์ ์๋๋ค. ์ฃผ์ด์ง๋ ์ ๋ ฅ์ ๋ฐ๋ผ ์คํ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์๋ค.
์์์ ์์ฐ์ i < j < k์ ๋ํด์, ai < aj์ด๊ณ ai > ak์ธ ๊ฒฝ์ฐ๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด ์ฆ๋ช ๋์ด ์๋ค. ์ฆ, ๋ฒ์ค๋ค์ ๋ฒํธ๊ฐ a1, a2, …, an์ ๊ฐ์ด ์ฃผ์ด์ง ๋, ์ด์ ๊ฐ์ (i, j, k)์ ์ฌ๋ก๊ฐ ์๋ค๋ฉด, (์ค๋ฆ์ฐจ์) ์์๋๋ก ์คํ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ฐ๊ตฌ์์์ ๊ฐ๋ฐ์๋ก ์ผํ๊ณ ์๋ ๋น์ ์, ์ฐ๊ตฌ์ ์ฃผ์ฐจ์ฅ์ ์ฃผ์ฐจ๋์ด ์๋ ๋ฒ์ค๋ค์ด ์์ ์ฃผ์ฐจ์ฅ์ ํ์ฉํ์ฌ ๋ฒํธ ์์๋๋ก(์ค๋ฆ์ฐจ์) ์ถ๋ฐํ ์ ์๋์ง ์์๋ณด๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค. ๋ฒ์ค๋ค์ด ๋ฒํธ ์์๋๋ก ์ถ๋ฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ์ง ์์๋ณด๊ธฐ ์ํด, ๊ทธ๊ฒ์ ์ฆ๋ช ํ ์ ์๋ ์๋ก ๋ค๋ฅธ (i, j, k)์ ์ผ์ด์ค๋ค์ ๋ช ๊ฐ๋ ์ฐพ์ ์ ์๋ ์ง ์ถ๋ ฅํ์ฌ๋ผ. (๋ง์ฝ, ์ถ๋ ฅ๊ฐ์ด 0์ด๋ผ๋ฉด ๋ฒ์ค๋ค์ด ์์ ๊ณผ์ ์ ํตํด, ์์๋๋ก ์ถ๋ฐํ ์ ์์์ ์๋ฏธํ๋ค.)
์ ์ฝ์กฐ๊ฑด
3≤N≤5,000์ธ ์ ์
๋ฒ์ค ๋ฒํธ๋ ์๋ก ์ค๋ณต๋์ง ์๋๋ค.
์ ๋ ฅํ์
์ฒซ ๋ฒ์งธ์ค์ ์์ด์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ์ค์ 1๋ถํฐ N๊น์ง์ ์ ์๊ฐ ์ฌ๋ฐฐ์ด๋ ์์ด์ด ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅํ์
๋ฌธ์ ์์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๋ก ๋ค๋ฅธ (i, j, k) ์์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ์์ 1
3
3 1 2
์ถ๋ ฅ์์ 1
0
โ Code
์คํ ์ ๋ ฌ์ด๋, a1, a2, ..., an์ ์ ๋ ฌํ ๋, ์์์๋ถํฐ ์์๋๋ก ์คํ์ Pushํ๊ฑฐ๋, ์คํ์์ Popํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ ๊ณจ๋ผ์ ๋ฐ๋ณตํ์ฌ, ์ ๋ ฌ๋ ์์๋ก ์ถ๋ ฅ๋๋๋ก ํ๋ ๊ฒ
Stack์ ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ(Push) ์๋ฃ๊ฐ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ด์ง๋(Pop) ์๋ฃ๊ตฌ์กฐ
# ์์ ์ฃผ์ฐจ์ฅ์ ์ถ์
๊ตฌ๊ฐ ํ๋๋ฐ์ ์๋ ๋ฐ๋ค๊ฐ,
# ํญ์ด ์ข์์ ์คํ(Stack)์ฒ๋ผ ๋งจ ์ฒ์ ๋ค์ด๊ฐ ๋ฒ์ค๋ ๋งจ ๋ง์ง๋ง์ ๋์ด
# ํ ๋ฒ ์์ ์ฃผ์ฐจ์ฅ์ผ๋ก ์ด๋ํ๋ ๋ฒ์ค๋ ๋ค์ ์๋์ ์ฃผ์ฐจ์ฅ์ผ๋ก ์ด๋ํ ์ ์์
# ๋ฒ์ค๋ค์ด ๋ฒํธ ์์๋๋ก ์ถ๋ฐํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ์ง ์์๋ณด๊ธฐ ์ํด,
# ๊ทธ๊ฒ์ ์ฆ๋ช
ํ ์ ์๋ ์๋ก ๋ค๋ฅธ (i, j, k)์ ์ผ์ด์ค๋ค์ ๋ช ๊ฐ๋ ์ฐพ์ ์ ์๋ ์ง ์ถ๋ ฅ
import sys
input = sys.stdin.readline
N = int(input())
bus = list(map(int, input().split()))
table = [[0 for i in range(N+1)] for i in range(N+1)]
for i in range(N-1, -1, -1) :
for j in range(1, N+1) :
if bus[i] < j :
table[j][i] = table[j][i+1] + 1
else :
table[j][i] = table[j][i+1]
answer = 0
for i in range(N) :
for j in range(i, N) :
if bus[i] < bus[j] :
answer += table[bus[i]][j]
print(answer)
์
์ง์ง
๋ชจ๋ฅด๊ฒ ๋ค
'๐ฆฅ ์ฝํ > Softeer' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Softeer] python ์ง๋ ์๋ ๊ตฌ์ถ (0) | 2023.01.07 |
---|---|
[Softeer] python 8๋จ ๋ณ์๊ธฐ (0) | 2023.01.07 |
[Softeer] python [์ธ์ฆํ๊ฐ(5์ฐจ) ๊ธฐ์ถ] ์ฑ์ ํ๊ฐ (0) | 2023.01.07 |
[Softeer] python A+B (0) | 2023.01.06 |
[Softeer] python ๊ทผ๋ฌด ์๊ฐ (0) | 2023.01.06 |