fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 33510 (C++) 이상한 나누기
최초 업로드: 2025-11-15 18:33:51
최근 수정 시간: 2025-11-15 18:33:51
게시자: rlatjwls3333
카테고리: 백준
조회수: 7
# [Silver II] 이상한 나누기 [문제 링크](https://www.acmicpc.net/problem/33510) ## 문제 설명 <p>$2$ 이상의 양의 정수 $N$에 대해, 이상한 나누기를 다음과 같이 정의한다.</p> <ul> <li>$N$이 홀수일 때, $N=(N+1)/2$ (이를 홀수 연산이라고 정의한다.)</li> <li>$N$이 짝수일 때, $N=N/2$ (이를 짝수 연산이라고 정의한다.)</li> </ul> <p>이진수로 표현된 양의 정수 $X$가 $1$이 될 때까지 이상한 나누기를 한다고 했을 때, 양의 정수 $X$에 홀수 연산을 하게 되는 횟수를 구해보자.</p> ## 입력 <p>첫째 줄에 이진수로 표현된 양의 정수 $X$의 자릿수 $N$이 주어진다. $(2 \le N \le 10\,000\,000)$</p> <p>둘째 줄에 이진수로 표현된 양의 정수 $X$가 주어진다. $0$으로 시작하는 입력은 주어지지 않는다.</p> ## 출력 <p>첫째 줄에 이진수로 표현된 양의 정수 $X$가 $1$이 될 때까지 이상한 나누기를 한다고 했을 때, 양의 정수 $X$에 홀수 연산을 하게 되는 횟수를 출력한다.</p> ## 풀이 직접 나누기를 하면서 세보면, 처음 만나는 '1'과, 그 이후의 '0'의 위치에서 1번씩 홀수 연산이 발생한다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; string s; cin >> n >> s; int cnt=0; for(int i=n-1;i>0;i--) { if(!cnt && s[i]=='1' || cnt && s[i]=='0') cnt++; } cout << cnt; } ```