์ƒˆ์†Œ์‹

๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜/-- ๋ฐฑ์ค€ (BOJ) - Python

๋ฐฑ์ค€(boj) ํŒŒ์ด์ฌ - 1377 ๋ฒˆ : ๋ฒ„๋ธ” ์†ŒํŠธ

  • -

๋ฌธ์ œ ๋งํฌ : https://www.acmicpc.net/problem/1377

 

1377๋ฒˆ: ๋ฒ„๋ธ” ์†ŒํŠธ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 500,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— A[1]๋ถ€ํ„ฐ A[N]๊นŒ์ง€ ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. A์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜๋Š” 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

www.acmicpc.net

์ผ๋‹จ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„๋ธ”์ •๋ ฌ์„ ์•Œ์•„์•ผํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒ„๋ธ”์ •๋ ฌ์— ๋Œ€ํ•ด ๋จผ์ € ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค.

https://infinitt.tistory.com/228

 

๋ฒ„๋ธ” ์ •๋ ฌ (bubble sort)

* ๋ฒ„๋ธ”์ •๋ ฌ์˜ ๊ฐœ๋… ๋‘ ์ธ์ ‘ํ•œ ์›์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋Š๋ฆฌ์ง€๋งŒ, ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํ•˜๋‹ค. ๊ตํ™˜์ •๋ ฌ์˜ ์ผ๋ถ€์— ์†ํ•œ๋‹ค. ์›์†Œ๊ฐ€ ์ด๋™ํ•˜๋Š” ๋ชจ์Šต์ด ๊ฑฐํ’ˆ์ด ์ˆ˜๋ฉด์œ„๋กœ ์˜ฌ๋ผ์˜ค๋Š” ๋“ฏํ•œ ๋ชจ์Šต๊ณผ ๊ฐ™..

infinitt.tistory.com

 

 


 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ C++์ฝ”๋“œ์ด๋‹ค.
bool change = false;
for (int i=1; i<=n+1; i++) {
    change = false;
    for (int j=1; j<=n-i; j++) {
        if (a[j] > a[j+1]) {
            change = true;
            swap(a[j], a[j+1]);
        }
    }
    if (change == false) {
        cout << i << '\n';
        break;
    }
}

 

* ๋ฌธ์ œ์— ์ฃผ์–ด์ง„ TastCase๋กœ ์„ค๋ช…ํ•ด๋ณด๋ฉด

 ๋ฒ„๋ธ”์ •๋ ฌ์€ 1ํšŒ์ฐจ๊ฐ€ ๋๋‚ ๋•Œ๋งˆ๋‹ค ๊ฐ€์žฅ ํฐ์ˆ˜๊ฐ€ ๋งจ ๋’ค๋กœ๊ฐ„๋‹ค.

๋ฒ„๋ธ”์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€, ์ •๋ ฌ์„ ๋งˆ์นœ ์‹œ์ ์—์„œ ๋ช‡ํšŒ์ฐจ์ธ์ง€ + 1๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ break๋œ๋‹ค.

์ฆ‰, ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ ์‹œ์ ์˜ i + 1 ์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์ดํ•ดํ•œ๋’ค, ๊ทธ๋ƒฅ ๊ทธ๋Œ€๋กœ ํŒŒ์ด์ฌ์ฝ”๋“œ๋กœ ์˜ฎ๊ฒผ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

๋ฒ„๋ธ”์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O( n² ) ์ด๋ฏ€๋กœ 25๋งŒ์˜ ์‹œ๊ฐ„๋ณต์žก๋„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํ•œ ๊ฒฐ๊ณผ์˜€๋‹ค.

 

 

* ์‹œ๊ฐ„์ดˆ๊ณผ ์—†์ด ํ’€๊ธฐ ์œ„ํ•ด์„œ

์ •๋ ฌ ์ „์˜ ์š”์†Œ๋“ค์˜ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ, ์ •๋ ฌ ํ›„์˜ ์š”์†Œ๋“ค์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋น„๊ตํ•ด๋ณธ๋‹ค๋ฉด, ๋ฒ„๋ธ”์ •๋ ฌ์‹œ์— ๋ช‡๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณค๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด์„œ 3๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ฉด, ์•ž์˜ ์ˆ˜๊ฐ€ ์š”์†Œ, ๋’ค์˜ ๋นจ๊ฐ„์ƒ‰์ด ์ธ๋ฑ์Šค๊ฐ’์ด๋‹ค.

 

  • 5๋Š” ๋’ค๋กœ 2์นธ์„ ์ด๋™ํ–ˆ๋‹ค.
  • 3์€ ์•ž์œผ๋กœ 1์นธ์„ ์ด๋™ํ–ˆ๋‹ค.
  • 1์€ ์•ž์œผ๋กœ 1์นธ์„ ์ด๋™ํ–ˆ๋‹ค.

์œ„์˜ ์‚ฌ์‹ค๋“ค์€ ์ธ๋ฑ์Šค๋ผ๋ฆฌ(๋นจ๊ฐ„ ์ˆซ์ž๋ผ๋ฆฌ) ๋บ„์…ˆ์„ ํ•ด๋ณด๋ฉด ์Œ์ˆ˜์ธ๊ฒฝ์šฐ๋Š” ๋’ค๋กœ ์ด๋™, ์–‘์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ์•ž์œผ๋กœ ์ด๋™ํ•œ ์นธ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐ’๋“ค์˜ ์ตœ๋Œ€๊ฐ’์ด ๋ฒ„๋ธ”์ •๋ ฌ์ด ๋ช‡ํšŒ์ฐจ๊นŒ์ง€ ํ•„์š”ํ•œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ๋Š” +1์ด ์ตœ๋Œ€๊ฐ’์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด 1ํšŒ์ฐจ๋งŒ ๋ฒ„๋ธ”์ •๋ ฌ์„ ์‹คํ–‰ํ•ด๋„ ์ •๋ ฌ์ด ๋œ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œ๊ฐ„์ดˆ๊ณผ์—†์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

๋”ฐ๋ผ์„œ ๋ฌธ์ œ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋กœ ๋‹ค์‹œ ํ™•์ธํ•ด๋ณด๋ฉด

+2๊ฐ€ ์ตœ๋Œ“๊ฐ’์ด๋ฏ€๋กœ ๋”ํ•˜๊ธฐ 1์„ ํ•ด์ฃผ์–ด์„œ +3์„ ์ถœ๋ ฅํ•˜๋ฉด ๋‹ต์ด ๋œ๋‹ค.

 


๊ฐœ๋…๋งŒ ์•ˆ๋‹ค๋ฉด ์ฝ”๋“œ๊ตฌํ˜„์€ ์–ด๋ ต์ง€ ์•Š์•˜๋‹ค.

 

* ํŒŒ์ด์ฌ (python) ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
arr = []
for i in range(n):
    arr.append( (int(input()), i) )

sorted_arr = sorted(arr) 
answer = [] 

for i in range(n):
    answer.append(sorted_arr[i][1] - arr[i][1])

print(max(answer) + 1)
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.