코딩/백준
[백준] 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)
|