© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 3028 - 창영마을

2025-07-15
BOJ
브론즈 II
python
원본 문제 보기
구현
문자열
시뮬레이션

문제

BOJ 3028 - 창영마을

세 개의 컵 중 첫 번째 컵 아래에 공이 있다. A, B, C 세 가지 동작으로 컵의 위치를 바꾼다. A는 1번과 2번, B는 2번과 3번, C는 1번과 3번 컵을 서로 바꾼다. 모든 동작 후 공이 어디에 있는지 출력하라.

입력

A, B, C로 이루어진 문자열이 주어진다. (길이 <= 50)

출력

공이 들어있는 컵의 번호를 출력한다.

예제

입력출력
AB3
ABCBCA1

풀이

리스트로 컵의 상태를 시뮬레이션하여 공의 위치를 추적한다.

  1. 리스트 [1, 0, 0]으로 초기 상태를 표현한다 (1번 컵에 공이 있음)
  2. 입력 문자열의 각 문자를 순회한다
  3. A이면 인덱스 0과 1을, B이면 1과 2를, C이면 0과 2를 스왑한다
  4. 순회 후 값이 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의 고정 리스트