728x90
#include <stdio.h>
#include <string.h>
int main(void) {
    char a;
    scanf("%c", &a);
    printf("%d", a);
    return 0;

}
#include <stdio.h>
#include <string.h>
int main(void) {
    int a;
    scanf("%c", &a);
    printf("%d", a);
    return 0;

}

이 문제는 두가지 방법으로 풀었다.

문자열을 숫자로 바꾸는 과정이다.

그래서 어떻게 해줘야 할까 했더니

저장하는 과정에서 바꾸어주는 것이다.

그래서 처음에 숫자로 인식한후 저장할 때 문자열 인식으로 바꾸어 주거나

혹은 처음부터 문자열로 받아서 이어서 나간뒤 출력해줘도

상관이 없는 것 같다. 모두 정답이라고 나온다.

 

그리고 이를 위해서는 #include <string.h>

가 필요하다. 아마도 문자열 문제이기 때문에 그런 것 같다.

 

나머지 구성은 일반적으로 진행되므로 패스를 한다.

 

https://www.acmicpc.net/problem/11654

 

728x90
728x90
#include <stdio.h>

int main(void) {
    int num;
    int number = 99;
    scanf_s("%d", &num);
    if (num < 100) {
        printf("%d", num);
    }
    if (num >= 100) {
        for (int i = 100; i <= num; i++) {
            int num1 = i / 100;
            int num2 = (i % 100) / 10;
            int num3 = (i % 100) % 10;

            if ((num1 - num2) == (num2 - num3))
                number++;
        }
        printf("%d\n", number);
    }
}

이 문제 역시 조금 까다로운 것 같다.

그리고 문제 이해가 좀 힘들었다.

한수 개념을 이해하지 못했기 때문이다.

인터넷을 뒤져서 조금 이해를 했는데

세자리가 있다면

백의자리수-십의자리수=십의자리수-일의자리수

가 성립한다면 한수라고 한다.

 

그리고 이러한 한수가 그 숫자안에 얼마나 있는지에 대해서

구하는 문제인 것 같다.

 

100미만의 수에서는 모두가 성립될 수 밖에없다.

자리수가 없기때문이다.

그리고 나머지는 위의 노란색의 공식을 따르면된다.

 

백의자리수,십의자리수, 일의자리수 구하는 것은

나누깅와 나머지 구하기로 만들면되고

인터넷에서 본 코드는 int와 구하는 것을 분리해 놓았는데

나는 이를 간단하게 하기 위해서 합쳐놓았다.

그래도 문제없이 출력된다.

숫자 작은것부터 차례대로 계산해야 하므로

꼭 i를 이용하여 계산을 하면된다.

그리고 공식을 적용한뒤 계속 숫자를 더해준다.

 

마지막으로 출력을 number로 넣어주면 완성이다.

https://www.acmicpc.net/problem/1065

728x90
728x90
#include <stdio.h>

int d(int n) {
    int sum = n;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int main() {
    int num[10001] = { 0 };

    for (int i = 1; i <= 10000; i++) {
        if (d(i) <= 10000) num[d(i)] = -1;
    }
    for (int i = 1; i <= 10000; i++) {
        if (num[i] != -1) printf("%d\n", i);
    }
}

이 문제는 원리를 이해하고 푸는 문제다.

인터넷을 열심히 뒤져서 알아내고 이해하였다.

먼저 int d(int d)의 설명을 하자면

이 묶음이 셀프 넘버의 원리를 담았다고 볼 수 있다.

나누기와 나머지 구하기로 각 자릿수를 만들었다. 

그리고 나머지로 된 것을 sum으로 더해서 반환한다.

 

메인을 설명해보자면

num는 10000까지라고 했으므로 배열을 만들어놓았고

for문

왜 이 2번을 해야 하는지 모르겠어서 한번 elif로 시도했으나 돌아가지 않았다.

꼭 2번을 나누어서 해주어야 하는 것 같다.

 계속 반복해 주면서 i를 더해주는 것이고

d(i)가 함수를 의미하는 것으로 보인다.

함수 호출해서 sum이 10000이하이게 되면

num[d(i)]를 -1로 해주고 나면

다시 세준다.

그래서 -1이 아니라면

출력을 해주면 된다.

 

https://www.acmicpc.net/problem/4673

 

 

728x90

+ Recent posts