๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[Softeer] python [์ธ์ฆํ‰๊ฐ€(4์ฐจ) ๊ธฐ์ถœ] ํ†ต๊ทผ๋ฒ„์Šค ์ถœ๋ฐœ ์ˆœ์„œ ๊ฒ€์ฆํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/Softeer

[Softeer] python [์ธ์ฆํ‰๊ฐ€(4์ฐจ) ๊ธฐ์ถœ] ํ†ต๊ทผ๋ฒ„์Šค ์ถœ๋ฐœ ์ˆœ์„œ ๊ฒ€์ฆํ•˜๊ธฐ

์ง•์ง•์•ŒํŒŒ์นด 2023. 1. 7. 00:41
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” Softeer์˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค>

https://softeer.ai/practice/info.do?idx=1&eid=654 

 

Softeer

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ (i, j, k) ์ˆœ์„œ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—๋Š” 2๋ฒˆ ๋ฒ„์Šค, ๋‘ ๋ฒˆ์งธ ์œ„์น˜์—๋Š” 3๋ฒˆ ๋ฒ„์Šค, ๊ทธ๋ฆฌ๊ณ  ์„ธ ๋ฒˆ์งธ ์œ„์น˜์—๋Š” 1๋ฒˆ ๋ฒ„์Šค๊ฐ€ ๊ธฐ๋‹ค

softeer.ai

 

โญ ๋ฌธ์ œ

์–ธ์–ด๋ณ„ ์‹œ๊ฐ„/๋ฉ”๋ชจ๋ฆฌ
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)

 

์™€

์ง„์งœ

๋ชจ๋ฅด๊ฒ ๋‹ค

728x90
๋ฐ˜์‘ํ˜•
Comments