- 관련 사이트: https://www.acmicpc.net/problem/1436
666이 들어있는 숫자를 가장 작은 수부터 카운팅 하는 문제이다.
(예: 첫번째 수 = 666, 두번째 수 = 1666, 6번째 수 = 5666, 187번째 수 = 66666)
하나씩 숫자를 증가시키면서 직접 카운팅해주었다.
1) 첫번째 수 666부터 시작
2) 다음 숫자가 연속으로 6이 세번 들어있는 숫자인지 확인: check(num++)
2-1) 마지막 숫자가 6인 경우, cnt++
2-2) 마지막 숫자가 6이 아닌 경우, cnt = 0
2-3) 6이 3번 나온 경우 cnt == 3? → return true
2-4) 다음 차례에서 마지막 수를 비교하기 위해 숫자 10으로 나눔
2-5) N = 0 이 되어 while 문 종료 시, return cnt == 3
3) 조건에 맞는 숫자인 경우, N--
4) 카운팅 완료되었으면 숫자 출력
#include <iostream>
using namespace std;
bool check(int num)
{
int cnt = 0;
while (num > 0)
{
if (num % 10 == 6)
cnt++;
else
cnt = 0;
// 6이 연속 3개인 경우
if (cnt == 3)
return true;
num /= 10;
}
return (cnt == 3);
}
int main()
{
int N;
cin >> N;
int num = 666;
N--;
while (N > 0)
{
if (check(++num))
N--;
}
cout << num << endl;
return 0;
}
- 메모리: 2020 KB
- 시간: 36 ms
- 코드 길이: 530 B
위의 코드에서는 입력 받은 수의 각 자리 수가 6인지 확인하기 위해 10으로 나누는 작업을 해주었다.
조건에 맞는 수인지를 판별하는 방식에는 여러가지가 있다.
아래의 코드는 동일한 로직이지만, 나누는 작업을 하지 않기 위해 스트링으로 변환하여 index 위치값을 비교해주도록 하였다.
#include <iostream>
using namespace std;
bool check(string num)
{
int cnt = 0;
for (char n : num)
{
if (n == '6')
cnt++;
else
cnt = 0;
// 6이 연속 3개인 경우
if (cnt == 3)
return true;
}
return (cnt == 3);
}
int main()
{
int N;
cin >> N;
int num = 666;
N--;
while (N > 0)
{
if (check(to_string(++num)))
N--;
}
cout << num << endl;
return 0;
}
- 메모리: 2020 KB
- 시간: 52 ms
- 코드 길이: 514 B
세번째 조건에 맞는 수 확인하는 방식으로는 1000으로 나눈 나머지 세 숫자가 666인지를 확인하는 방법도 있다.
즉, 끝의 세자리가 666인지 확인 후 아니라면 10을 나눈 몫의 끝의 세자리가 666인지를 숫자가 666보다 작아질 때까지 반복하도록 한다.
#include <iostream>
using namespace std;
bool check(int num)
{
while (num >= 666)
{
if (num % 1000 == 666)
return true;
num /= 10;
}
return false;
}
int main()
{
int N;
cin >> N;
int num = 666;
N--;
while (N > 0)
{
if (check(++num))
N--;
}
cout << num << endl;
return 0;
}
- 메모리: 2020 KB
- 시간: 12 ms
- 코드 길이: 384 B
'Algorithm > BackJoon' 카테고리의 다른 글
4134번: 다음 소수 (0) | 2023.06.23 |
---|---|
1735번: 분수 합 (0) | 2023.06.20 |
1018번: 체스판 다시 칠하기 (0) | 2023.06.14 |
15964번: 이상한 기호 (0) | 2023.06.14 |
10814번: 나이순 정렬 (0) | 2023.06.13 |
댓글