문제
세 개의 컵 중 첫 번째 컵 아래에 공이 있다. A, B, C 세 가지 동작으로 컵의 위치를 바꾼다. A는 1번과 2번, B는 2번과 3번, C는 1번과 3번 컵을 서로 바꾼다. 모든 동작 후 공이 어디에 있는지 출력하라.
입력
A, B, C로 이루어진 문자열이 주어진다. (길이 <= 50)
출력
공이 들어있는 컵의 번호를 출력한다.
예제
| 입력 | 출력 |
|---|---|
AB | 3 |
ABCBCA | 1 |
풀이
리스트로 컵의 상태를 시뮬레이션하여 공의 위치를 추적한다.
- 리스트
[1, 0, 0]으로 초기 상태를 표현한다 (1번 컵에 공이 있음) - 입력 문자열의 각 문자를 순회한다
A이면 인덱스 0과 1을,B이면 1과 2를,C이면 0과 2를 스왑한다- 순회 후 값이 1인 인덱스 + 1이 정답이다
핵심 아이디어: 컵의 위치를 배열로 표현하고, 각 동작을 스왑 연산으로 시뮬레이션하면 된다.
코드
li = [1, 0, 0]
s = input()
for c in s:
if c == "A":
li[0], li[1] = li[1], li[0]
elif c == "B":
li[1], li[2] = li[2], li[1]
else:
li[0], li[2] = li[2], li[0]
print(li.index(1) + 1)복잡도
- 시간: O(N) — 문자열 길이만큼 순회
- 공간: O(1) — 크기 3의 고정 리스트