Algorithm/BAEKJOON

[백준 BOJ] 1091 카드 섞기

DongKeun2 2022. 2. 24. 14:59

https://www.acmicpc.net/problem/1091

 

1091번: 카드 섞기

지민이는 카지노의 딜러이고, 지금 3명의 플레이어(0, 1, 2)가 있다. 이 게임은 N개의 카드를 이용한다. (0 ~ N-1번) 일단 지민이는 카드를 몇 번 섞은 다음에, 그것을 플레이어들에게 나누어 준다. 0

www.acmicpc.net

 

🔥 코드

# 입력받기
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)

⭕ 해설

  1.  배열을 바꿀 때마다 cnt를 늘려주고 모든 플레이어에게 카드를 나눠줄 수 있을 때 cnt를 출력합니다.
  2.  무한 루프에 돌지 않도록 배열이 원상복귀되면 종료하고 그 때까지 찾지 못했다면 -1을 출력합니다.