© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

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

BOJ 4678 - Skew Binary

2026-03-11
BOJ
브론즈 IV
cpp
원본 문제 보기
수학
구현
문자열

문제

BOJ 4678 - Skew Binary

Skew Binary 수 체계로 표현된 수를 10진수로 변환하는 문제

풀이

Skew Binary에서 k번째 자릿수(오른쪽부터 1-indexed)의 가중치는 2^k - 1이다. 문자열을 왼쪽부터 순회하며 각 자릿수에 해당 가중치를 곱해 누적한다.

코드

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
 
using namespace std;
 
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
 
  string skew;
  while (cin >> skew && skew != "0") {
    long long decimal = 0;
    int n = skew.length();
 
    for (int i = 0; i < n; i++) {
      int k = n - i;
      int digit = skew[i] - '0';
 
      decimal += (long long)digit * ((1LL << k) - 1);
    }
    cout << decimal << "\n";
  }
 
  return 0;
}

복잡도

  • 시간: O(n) (n: 문자열 길이)
  • 공간: O(1)

최근 글

  • 2026-03-15BOJ 4757 - A Contesting Decision
  • 2026-03-14BOJ 4749 - Take Your Vitamins
  • 2026-03-13BOJ 4732 - 조옮김
  • 2026-03-12BOJ 4697 - Fifty Coats of Gray
  • 2026-03-10BOJ 4646 - Magnificent Meatballs
이전 글

BOJ 4646 - Magnificent Meatballs

다음 글

BOJ 4697 - Fifty Coats of Gray