본문으로 건너뛰기
풀이 목록으로 돌아가기

BOJ 4872 - SPIN

2026-03-23
BOJ
브론즈 II
cpp
원본 문제 보기
구현
문자열

문제

BOJ 4872 - SPIN

초기 숫자 자물쇠 상태 s와 여러 개의 회전 명령이 주어지면, 각 명령의 자리별 값만큼 해당 자리 숫자를 돌리고 최종 상태를 출력한다. 덧셈은 10으로 나눈 나머지를 사용한다.

풀이

초기 상태를 정수 배열로 변환한 뒤, 각 명령을 읽을 때마다 자리별로 (current[i] + move[i]) % 10을 적용해 갱신한다.

코드

#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
 
  string s;
  if (!(cin >> s)) return 0;
 
  int n = s.length();
  vector<int> current(n);
  for (int i = 0; i < n; ++i) {
    current[i] = s[i] - '0';
  }
 
  string move;
  while (cin >> move) {
    for (int i = 0; i < n; ++i) {
      current[i] = (current[i] + (move[i] - '0')) % 10;
    }
  }
 
  for (int i = 0; i < n; ++i) {
    cout << current[i];
  }
  cout << endl;
 
  return 0;
}

복잡도

  • 시간: O(명령 수 * n) (n: 자릿수)
  • 공간: O(n)

최근 글