문제 출처: www.acmicpc.net/problem/4673
1. 코드
#include <stdio.h>
int check1(int n) //10미만의 수 확인하는 함수
{
if(n%2!=0) //2의 배수가 아니라는 공통점 이용
return 1;
else
return 2;
}
int check2(int n) //10초과 100미만의 수 확인하는 함수
{
int i, n10, n1, n11; //n10 = i의 10의 자릿수, n1 = i의 1의 자릿수
for(i=1; i<n; i++)
{
n10=i/10;
n1=i%10;
n11=i+n10+n1;
if(n11==n)
return 2;
}
return 1;
}
int check3(int n) //100초과 1000미만의 수 확인하는 함수
{
int i, n100, n10, n1, n111; //n100 = i의 100의 자릿수
for(i=1; i<n; i++)
{
n100=i/100;
n10=(i-n100*100)/10;
n1=i%10;
n111=i+n100+n10+n1;
if(n111==n)
return 2;
}
return 1;
}
int check4(int n) //1000초과 10000미만의 수 확인하는 함수
{
int i, n1000, n100, n10, n1, n1111; //n1000 = i의 1000의 자릿수
for(i=1; i<n; i++)
{
n1000=i/1000;
n100=(i-n1000*1000)/100;
n10=(i-n1000*1000-n100*100)/10;
n1=i%10;
n1111=i+n1000+n100+n10+n1;
if(n1111==n)
return 2;
}
return 1;
}
int main(void)
{
int n=1, i, check;
for(i=0; i<10000; i++) //1부터 10000까지 반복하여 확인
{
if(n<=10)
check=check1(n);
else if(n<100)
check=check2(n);
else if(n<1000)
check=check3(n);
else
check=check4(n);
if(check==1) //1로 반환되면 출력
printf("%d\n", n);
n++;
}
return 0;
}
2. 느낀 점
첫 번째로 이 방법은 우선 돌아가게 만든 것입니다. 한마디로 좋은 프로그램이 아닌 것 같습니다. 이 방식은 그냥 계속해서 반복을 하여 풀어낸 코드라 더 좋은 코드를 보면서 배우면 좋을 것 같습니다.
그냥 아 이런 방식도 있구나 정도로 끝났으면 좋겠습니다. 저 같은 경우에는 이러한 방식 이외에는 떠오르지 않아 그랬지만 저 또한 다른 방식의 코드를 찾아보고 개선할 생각입니다.
이 방식은 한마디로 그냥 0부터 10000까지 하나씩 대입하여 맞추는 방식입니다. 좋은 코드는 아닌 것 같습니다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 11720번: 숫자의 합 [Java] (0) | 2019.12.22 |
---|---|
백준 알고리즘 1065번: 한수 C언어 (0) | 2019.12.20 |
백준 알고리즘 4673번: 셀프 넘버 C언어(개선) (0) | 2019.12.11 |
백준 알고리즘 4344번: 평균은 넘겠지 C언어 (0) | 2019.12.08 |
백준 알고리즘 8958번: OX퀴즈 C언어 (0) | 2019.12.07 |