코딩/백준

[백준] 1091번 : 카드 섞기 (Python 파이썬)

킴 비제이 2021. 4. 3. 21:24

알고리즘 분류 : 구현, 시뮬레이션

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

 

1091번: 카드 섞기

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

www.acmicpc.net

풀이

   1. 원래 배열 p를 ori라는 배열에 넣어놓고, 배열 g([0, 1, 2 ~~~]), 새로운 배열 new를 만든다.

 

   2. 배열 p와 목표 배열 g가 같아질 때까지 반복

       - 배열 new에 s[i] 번째 인덱스에 p[i]를 넣는다.

       - 배열 p에 new를 넣고 new는 초기화한다.

 

   ※ -1 을 출력하는 조건

     원래 배열이었던 ori와 새로 만든 배열 p가 같으면 -1을 출력한다.

     만들어진 배열이 이미 있었다면 그 뒤에 생기는 배열은 앞의 배열들과 다 같아지기 때문이다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
n = int(input())
p = list(map(int, input().split()))
ori = p
s = list(map(int, input().split()))
g = [0, 1, 2] * (n // 3)
new = [0] * n
cnt = 0
 
while p! = g:
    for i in range(n):
       new[s[i]] = p[i]
 
   p = new
   new = [0] * n
   cnt += 1
    if ori == p:
       cnt =- 1
        break
print(cnt)