fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 33756 (C++) 88888
최초 업로드: 2025-04-26 03:55:33
최근 수정 시간: 2025-07-25 09:17:41
게시자: rlatjwls3333
카테고리: 백준
조회수: 13
# [Silver III] 88888 [문제 링크](https://www.acmicpc.net/problem/33756) ## 문제 설명 <p>중국에서는 $8$을 행운의 숫자로 여깁니다.</p> <p>십진법으로 표현했을 때 모든 자릿수가 $8$인 수를 <strong>$8$-넘버</strong>라고 합시다. 예를 들어, $8$, $88$, $88 888 888$ 등이 $8$-넘버라고 할 수 있습니다.</p> <p>어떤 양의 정수를 $8$개 이하의 $8$-넘버의 합으로 표현할 수 있다면, 이 정수를 <strong>행운의 수</strong>라고 합시다.</p> <p>예를 들어, 정수 $64$는 $8+8+8+8+8+8+8+8$이므로 $8$개 이하의 $8$-넘버의 합으로 표현할 수 있습니다. 따라서 $64$는 행운의 수입니다.</p> <p>하지만, 정수 $72$는 어떻게 해도 $8$개 이하의 $8$-넘버로 표현할 수 없습니다. 따라서 $72$는 행운의 수가 아닙니다.</p> <p>양의 정수 $N$이 주어질 때, $N$이 행운의 수인지 판단하는 프로그램을 작성해 주세요.</p> ## 입력 <p>첫 번째 줄에 테스트 케이스의 개수 $T$가 주어집니다.</p> <p>그다음 줄부터 $T$개의 테스트 케이스가 주어집니다. 각 테스트 케이스는 한 줄로 구성되며, 각각 양의 정수 $N$이 한 줄에 주어집니다.</p> ## 출력 <p>주어진 정수 $N$이 행운의 수라면 <code>Yes</code>를, 아니라면 <code>No</code>를 출력합니다.</p> ## 풀이 #### n을 8-넘버 8개 이하로 만들 수 있는지 확인하면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { long long n; cin >> n; long long pal = 888'888'888'888'888'888; int cnt=0; while(n && cnt<8) { if(n>=pal) { n -= pal; cnt++; } else { pal /= 10L; } } if(n==0 && cnt<=8) cout << "Yes\n"; else cout << "No\n"; } } ```