본문 바로가기
백준/C++

[백준/C++] 1065번 한수

by 뷕뺙쀡 2020. 10. 9.
#include <iostream>
using namespace std;

int main()
{
    int N; //고정
    cin >> N;
    int lists[3] = {};
    int count,div_N,theN;
    int listCount = 0;

    if (N < 100) printf("%d ", N);
    else //(N>=100)
    {
        for (int i = 100; i <= N; i++)
        {
            theN = i; div_N = theN; count = 0;
            while (theN != 0)
            {
                div_N = theN % 10;
                theN /= 10;
                lists[count] = div_N;
                count++;
                if (count == 3) break;
            }
            if ((lists[0] - lists[1] == lists[1] - lists[2]) && i != 1000) listCount++;
        }
        printf("%d", 99 + listCount);
    }
    return 0; 
}

단계별 풀어보기-함수 문제이다만... 함수쓰기 귀찮아서 그냥 그대로했다. 가장 처리가 어려웠던 건 입력값으로 1000을 받았을 때 지정한 배열의 크기(3)를 넘어가므로 별도로 처리해야하는 것이었는데 이걸 함수로 했으면 훨씬 코드가 짧아졌을 것 같긴 하다.

Run-Time Check Failure #2 - Stack around the variable 'lists' was corrupted. 라는 오류가 났었는데 이 오류는 위에 말했던 것처럼 1000을 입력값으로 받았을 때 크기가 3인 배열의 인덱스 번호인 count가 3이되므로 위 오류가 났던 것 1000이 입력 값일 때를 따로 처리함으로써 해결했다.

댓글