Sol1) 문자열과 동적 할당을 이용한 풀이 -> 메모리와 시간 많이 사용.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for(long long i = 666;;i++){
int len = 0; //i의 자릿수를 저장할 변수
long long temp = i;
while(temp > 0){ //계속 자릿수를 하나씩 깎아나가며 len 카운트.
temp /= 10;
len++;
}
char *num = malloc(sizeof(char) * (len + 1)); //NULL까지 고려해 len + 1만큼 메모리 할당
sprintf(num,"%lld", i); //sprintf함수로 정수를 문자열로 저장.
if(strstr(num, "666") != NULL){ //strstr함수는 해당 문자를 찾지 못하면 NULL을 리턴한다.
cnt++; //문자열을 찾았을 때 = NULL을 리턴하지 않았을 때 카운트.
}
if(cnt == n){ //카운트 수와 입력된 수가 같으면 해당 수 출력 후 프로그램 종료.
printf("%s\n", num);
return 0;
}
}
}
Sol2) 문자열로 변환하지 않고 정수 그대로 처리
#include <stdio.h>
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for(long long i = 666;;i++){
if(i % 1000 == 666) //연속된 세 수를 구하는 방법
cnt++;
else{
long long temp = i;
while(temp > 0){ //만일 666이 일의자리부터 백의자리까지 있지 않을 경우, 자릿수를 하나씩 깎으며
temp /= 10; //세자리수 단위로 체크.
if(temp % 1000 == 666){
cnt++;
break;
}
}
}
if(cnt == n){
printf("%lld\n", i);
return 0;
}
}
}
연속된 정수의 포함 여부를 정수 그대로 처리하는 법을 배웠다.
'BOJ' 카테고리의 다른 글
백준 2747번 피보나치 수 [C언어] (0) | 2022.08.15 |
---|---|
백준 2863번 이게 분수? [C언어] (0) | 2022.08.13 |
백준 1018번 체스판 다시 칠하기 [C언어] (0) | 2022.08.10 |
백준 1977번 완전제곱수 [C언어] (0) | 2022.08.08 |
#2577(java) (0) | 2022.07.02 |