๋ฐฑ์ค 25181๋ฒ
https://www.acmicpc.net/problem/25181
๋ฌธ์
ํ๊ธฐ
์์ด์ ๋๋ฉด์ ์ค๋ณต๋๋ ์ซ์๊ฐ ๋์ค๋ฉด, ๋งจ ์๋ถํฐ ์์ด์ ๋๋ฉฐ ๋ฐ๊ฟ์ฃผ๋
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ค. ๋จ์ํ๊ฒ ์ด๋ ๊ฒ ์๊ฐํ๋๋ฐ, ์๊ฐ์ด๊ณผ๋ฅผ ๋ฌด๋ ค 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])