210. 카드섞기
1) 어떤 전략(알고리즘)으로 해결?
2) 코딩 설명
<내 풀이>
import sys
n = int(sys.stdin.readline().strip())
p = list(map(int,sys.stdin.readline().strip().split()))
target=[[] for _ in range(3)]
for k in range(n) :
target[p[k]].append(k)
s = list(map(int,sys.stdin.readline().strip().split()))
card_seq=[]
for i in range(n) :
card_seq.append(i)
initcard = card_seq.copy()
cnt = 0
while True :
cmp_with_target=[[] for _ in range(3)]
for j in range(n) :
cmp_with_target[j%3].append(card_seq[j])
for v in range(3) :
cmp_with_target[v].sort()
if cmp_with_target==target: print(cnt) ; exit()
else :
cnt+=1
tmps = card_seq.copy()
for c in range(n) :
card_seq[s[c]] = tmps[c]
if card_seq==initcard:
print(-1); exit()
<내 틀렸던 풀이, 문제점>
(1) 1차 난관
- okay 가능한 경우들은 다 해결됨, 근데 안되는 경우들은 언제지?,,,
import sys
n = int(sys.stdin.readline().strip())
p = list(map(int,sys.stdin.readline().strip().split()))
pp=[[] for _ in range(3)]
for k in range(n) :
pp[p[k]].append(k)
s = list(map(int,sys.stdin.readline().strip().split()))
ss=[]
for i in range(n) :
ss.append(i)
cnt = 0
while True :
sss=[[] for _ in range(3)]
for j in range(n) :
sss[j%3].append(ss[j])
for ssss in range(3) :
sss[ssss].sort()
if sss==pp: print(cnt) ; exit()
else :
cnt+=1
tmps = ss.copy()
for c in range(n) :
ss[s[c]] = tmps[c]
print(ss)
-1의 조건 :
- 계속해서 카드를 섞어주다가 첫 순서 (initcard)랑 똑같은 거 발견했다면 , 한번 쭉 돌았는데도 못 찾은거니 찾을 수 없는 것 => 이 때 -1 !
<반성 점>
<배운 점>