✔ 문제 013 카드 게임
⬜ 핵심 아이디어
가장 위의 카드를 가장 아래에 있는 카드 밑으로 옮기는 동작은 큐의 선입선출 성질을 이용하면 쉽게 구현할 수 있다.
+ 파이썬의 rotate() 메서드는 deque에서 지원하는 배열 회전 메서드이다. 괄호 안에 양수를 넣으면 오른쪽으로 회전하며 음수를 넣으면 왼쪽으로 회전한다. 예제를 통해 살펴보자.
from collections import deque
nums = [1, 2, 3, 4, 5, 6]
queue = deque(nums)
queue.rotate(-1) # 왼쪽으로 1회 회전하기
print(queue) # deque([2, 3, 4, 5, 6, 1])
왼쪽으로 한 칸씩 밀리기 때문에 맨 앞에 있던 1이 맨 뒤로 이동한 것을 확인할 수 있다.
이번에는 양수를 넣어서 데이터가 오른쪽으로 잘 회전하는지 살펴보자.
from collections import deque
nums = [1, 2, 3, 4, 5, 6]
queue = deque(nums)
queue.rotate(3) # 오른쪽으로 3회 회전하기
print(queue) # deque([4, 5, 6, 1, 2, 3])
예상했던 대로 배열이 오른쪽으로 세 번 밀린 것을 확인할 수 있다.
JAVA
import java.util.Queue;
import java.util.LinkedList;
import java.util.Scanner;
class Main {
public static void main (String[] args) throws java.lang.Exception {
Scanner sc = new Scanner(System.in);
Queue<Integer> myQueue = new LinkedList<>();
int N = sc.nextInt();
for(int i = 1; i <= N; i++){
myQueue.add(i);
}
while(myQueue.size() > 1) { // 카드 한장 남을때까지
myQueue.poll(); // 맨 위 카드 버림
myQueue.add(myQueue.poll()); // 맨 위 카드를 가장 아래 카드 밑으로 이동
}
System.out.println(myQueue.poll()); // 마지막으로 남은 카드 출력
}
}
PYHON
from collections import deque
n = deque(range(1, int(input())+1))
while len(n) != 1:
n.popleft()
n.rotate(-1)
print(n[0])
'자료구조&알고리즘 > 알고리즘_코딩테스트' 카테고리의 다른 글
[알고리즘_코딩 테스트_JAVA] 수 정렬하기 1 (JAVA, PYTHON) (0) | 2023.12.27 |
---|---|
[알고리즘_코딩 테스트_JAVA] 절댓값 힙 구현하기 (JAVA, PYTHON) (1) | 2023.12.26 |
[알고리즘_코딩 테스트_JAVA] 오큰수 (JAVA, PYTHON) (1) | 2023.12.25 |
[알고리즘_코딩 테스트_JAVA] 투 포인터 (JAVA, PYTHON) (1) | 2023.11.13 |
[알고리즘_코딩 테스트_JAVA] 구간 합 (JAVA, PYTHON) (3) | 2023.11.09 |