[BOJ]๋ฐฑ์ค€#25181 Gold 4 Swap the elements ๐Ÿ”ƒ๐Ÿ”ƒ (Python, ํŒŒ์ด์ฌ)

์ž„์ค€์„ฑยท2022๋…„ 8์›” 7์ผ
0

๋ฐฑ์ค€ Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
37/59
post-thumbnail

๋ฐฑ์ค€ 25181๋ฒˆ
https://www.acmicpc.net/problem/25181

๋ฌธ์ œ



ํ›„๊ธฐ

โฐ ํ’€์ด์‹œ๊ฐ„ 2์‹œ๊ฐ„ ++โฐ

์ˆ˜์—ด์„ ๋Œ๋ฉด์„œ ์ค‘๋ณต๋˜๋Š” ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด, ๋งจ ์•ž๋ถ€ํ„ฐ ์ˆ˜์—ด์„ ๋Œ๋ฉฐ ๋ฐ”๊ฟ”์ฃผ๋Š”

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ–ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฌด๋ ค 4๋ฒˆ์„ ๊ฒช์—ˆ๋‹ค.

๊ทธ ์ด์œ ์ธ ์ฆ‰์Šจ,

1 1 2 3 5 6 8 1 1 1 7 ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ๋Š”

์ด์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค.

1 2 1 3 5 6 8 1 1 1 7
1 2 3 1 5 6 8 1 1 1 7
1 2 3 1 6 5 8 1 1 1 7
1 1 3 1 6 5 8 2 1 1 7 <<< ๋ฐ”๋กœ ์ด ๋ผ์ธ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ,

์•ž์„  ๊ณผ์ •์—์„œ ์ด๋ฏธ ๋ฐ”๊ฟ”์กŒ๋˜ 1์ด ๋‹ค์‹œ ์•ž์œผ๋กœ ๊ฐ€๋ฉด์„œ,

์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค์˜ 2๋ฒˆ์งธ์— ํ•ด๋‹นํ•˜๋Š”(li[1]) 1์ด ๋‹ค์‹œ ์›๋ž˜์˜ ์ž๋ฆฌ๋กœ ๋Œ์•„๊ฐ€์„œ, ๋ฌดํ•œ Loop๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฒŒ๋œ๋‹ค.

์ด ๊ณผ์ •์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์˜ค๋ž˜ ์žก์•„๋จน์—ˆ๊ณ , ๊ฒฐ๋ก ์€

์„œ๋กœ ๋‹ค๋ฅธ๊ฒŒ ๋‚˜์˜ค๋ฉด ๋ฐ”๊ฟ”์ฃผ๋Š”๋ฐ, ๋ฐ”๊ฟ”์ค„ ์ˆซ์ž ์—ญ์‹œ
๋ฐ”๋€Œ๊ธฐ ์ „ ์ˆซ์ž์™€ ๊ฐ™์œผ๋ฉด ์•ˆ๋œ๋‹ค.

๋ผ๋Š” ๊ฒƒ์„ ์ฝ”๋“œ์— ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

import sys
input= sys.stdin.readline
import copy

N = int(input())
li = list(map(int,input().split()))
new_li= copy.deepcopy(li)
li_dict = dict()

if len(li) % 2 == 0:
    k = len(li) // 2 #๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ํšŸ์ˆ˜
else:
    k= (len(li) //2) + 1 #๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ํšŸ์ˆ˜

for i in li:
    if i not in li_dict.keys(): 
        li_dict[i] = 1
    else:
        li_dict[i] += 1

for i in li_dict.items(): # ์–ด๋– ํ•œ ์š”์†Œ์˜ count์ˆ˜๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์˜ ๋ชซ๋ณด๋‹ค ํฌ๋ฉด ์•„๋ฌด๋ฆฌ ๋ฐ”๊ฟ”๋„ ์›ํ•˜๋Š” ์ˆ˜์—ด์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค.
    if i[1] > len(li) // 2:
        print(-1)
        exit()

# ์ผ๋‹จ ์ฒ˜์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. k-1๋งŒํผ for๋ฌธ ๋Œ๋ฆด ์˜ˆ์ •์ด๊ณ ,
# list์—์„œ ๋Œ๋ฉด์„œ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ ๊ฐ’์ด ๋‹ค์Œ์— ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉด ๋‘˜์ด swapํ•œ๋‹ค์Œ list๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ถœ๋ฐœํ•œ๋‹ค.
# new_list์™€ ๋น„๊ตํ•˜๋ฉด์„œ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ๋œ๋‹ค.

for i in range(len(li)):
    if li[i] != li[0]: #์šฐ์„  ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์™€ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹œ์ž‘.
        (li[0],li[i]) = (li[i], li[0])
        break


while True:
    error = 0
    for i in range(len(li)): #๋งŒ์•ฝ ๋ชจ๋“  list์˜ ๊ฐ’๋“ค์ด ์ „๋ถ€ ๋‹ค๋ฅด๋ฉด 
        if li[i] != new_li[i]:
            error+=1
        else:
            break
    if error == len(li): #ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค. 
        print(*li)
        exit()

    for i in range(len(li)):
        if li[i] == new_li[i] :
            for j in range(len(li)):
                if li[j] != li[i] and new_li[j] != li[i]: #์„œ๋กœ ๋‹ค๋ฅธ๊ฒŒ ๋‚˜์˜ค๋ฉด ๋ฐ”๊ฟ”์ฃผ๋Š”๋ฐ, ๋ฐ”๊ฟ”์ค„ ์ˆซ์ž ์—ญ์‹œ ๋ฐ”๋€Œ๊ธฐ ์ „ ์ˆซ์ž์™€ ๊ฐ™์œผ๋ฉด ์•ˆ๋œ๋‹ค.
                    (li[i],li[j]) = (li[j],li[i])
profile
์•„๋ฌด๋ตํฌ ์žˆ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€