https://www.acmicpc.net/problem/1091
🔥 코드
# 입력받기
N = int(input())
P = list(map(int, input().split()))
S = list(map(int, input().split()))
# 카드 배열 복사
lst = [x for x in P]
lst2 = [x for x in P]
# 값 초기화
result = -1
cnt = 0
# 한 바퀴 돌 동안 답이 안나오거나 찾으면 break
while 1:
# lst의 카드배열이 나눠줄 수 있는 배열인가?
for i in range(N):
if lst[i]%3 != i%3:
break
else:
result = cnt
break
# 나눠줄 수 없는 배열이면 카드 배열 바꾸고 cnt += 1
for i in range(N):
lst2[S[i]] = lst[i]
cnt += 1
# lst에 lst2(바뀐 카드 배열) 복사
lst = [x for x in lst2]
# 만약 한 바퀴를 돌아 lst가 P(원래 카드배열)과 같아지면 종료
if lst == P:
break
print(result)
⭕ 해설
- 배열을 바꿀 때마다 cnt를 늘려주고 모든 플레이어에게 카드를 나눠줄 수 있을 때 cnt를 출력합니다.
- 무한 루프에 돌지 않도록 배열이 원상복귀되면 종료하고 그 때까지 찾지 못했다면 -1을 출력합니다.
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준 BOJ] 15649 N과 M(1) (python) (0) | 2022.03.04 |
---|---|
[백준 BOJ] 1063 킹 (python) (0) | 2022.02.24 |
[백준 BOJ] 2133 타일 채우기 (python) (0) | 2022.02.23 |
[백준 BOJ] 13398 연속합 2 (python) (0) | 2022.02.18 |
[백준 BOJ] 14696 딱지놀이 (python) (0) | 2022.02.16 |