programming

C언어 4차시 Layer7 과제 - 백준 1065

leesu0605 2022. 4. 17. 20:39

코드


#include <stdio.h>
using namespace std;

int main(){
        int n;
        scanf("%d", &n);
        if(n<100)
                printf("%d", n);
        else{
                char str[3]={1, 1, 1};
                int count=0;
                for(int i=1;i<=n/100;i++){
                        str[0]=i;
                        for(int j=0;j<=9;j++){
                                str[1]=j;
                                for(int l=0;l<=9;l++){
                                        str[2]=l;
                                        if(i*100+j*10+l>n)
                                                break;
                                        else if(str[0]-str[1]==str[1]-str[2])
                                                count++;
                                }
                        }
                }
                printf("%d", 99+count);
        }
        return 0;
}


˙ 이 문제는 입력받은 값까지의 숫자 중에서 각 자릿수가 등차수열을 이루는 수의 개수를 구하는 프로그램을 만드는 것이다.

˙ 이 문제를 푸는 방법 중에는 나누기를 이용한 방법 등 여러가지가 있지만, 나는 배열을 이용해 비교적 연산시간이 오래 걸리는 나눗셈을 사용하지 않았다. 일단 한수 범위는 999까지 이므로 길이가 3인 배열을 하나 선언해주고, 3중 for문을 만들어 각각 100의 자리수, 10의 자리수, 1의 자리수를 증가시키며 그 값을 실시간으로 배열에 저장해 0번째 데이터와 1번째 데이터의 차이가 1번째 데이터와 2번째 데이터의 차이와 같을 때 count를 증가시켜 맨 탐색이 끝나면 count값을 출력하게 했다. 마지막으로 수가 3자리수가 아닐 때는 무조건 등차수열을 이루므로 그거에 대한 예외처리를 해줘야 정상작동한다.