원하는 번째일때의 수이니 번째를 cnt 카운트해서 입력한 n 과 같을때까지
내부의 수 ans를 ++ 하고 ans를 temp로 복사하여
temp의 %1000 일때의 값(1000으로 나눴을때의 나머지)가 666이면 cnt를 ++
아닐 경우에도 마지막 자리수에 666이 아니라 중간자리수에 666이 있을 수 있으므로 10으로 나누어
한자리씩 내려당겨준어 그걸 다시 666이 있나 비교하여 있으면 cnt++
없으면 10으로 나누는것을 반복, temp가 나누다가 0이되면 반복 탈출하여 cnt ==n 될때까지
ans 값을 올려주면 되는 문제이다
https://www.acmicpc.net/problem/1436
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
int temp;
int ans = 0;
int cnt = 0;
cin >> n;
while (cnt != n)
{
ans++;
temp = ans;
while (temp != 0)
{
if (temp % 1000 == 666)
{
cnt++;
break;
}
else
{
temp /= 10;
}
}
}
cout << ans;
return 0;
}
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 1929/c++] 소수 구하기 (0) | 2022.07.30 |
---|---|
[백준 11399/c++] ATM (0) | 2022.07.29 |
[백준 5555/c++] 반지 (0) | 2022.07.27 |
[백준 1269/c++] 대칭 차집합 (0) | 2022.07.25 |
[백준 1120/c++] 문자열 (0) | 2022.07.24 |
댓글