프로그래밍 언어/C언어

백준 > 2231 분해합

B612 2022. 2. 1. 19:17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int divide(int n); //각 자리수 구해주는 함수
 
int main() {
    int n;
    int i = 1;
 
    scanf("%d"&n);
 
    while (1) { //어차피 젤 작은 생성자
        if (n == i + divide(i)) {
            printf("%d", i);
            break;
        }
        else if (i == n) {
            printf("0");
            break;
        }
        i++;
    }
}
 
int divide(int n) {
    int arr[7= { 0, };
    int num = 1000000;
    int sum = 0//각 자리수의 합
 
    for (int i = 0; i < 7; i++) {
        arr[i] = n / num;
        n = n % num;
        num /= 10;
    }
 
    for (int i = 0; i < 7; i++) {
        sum += arr[i];
    }
    
    return sum;
}
cs

시간초과가 나지 않았다 왜일까? 내 생각보다 while문은 빠른가보다.. (시간 복잡도에 관한 책을 읽고 있다 곧 깨달을지도?)

'N의 가장 작은 생성자'가 나름 중요 포인트인거 같다

어차피 제일 작은 수 구하면 되니까 바로 break하면 된다 순간 min 써서 최소값 구할뻔

 

 

+) 백준 문제 풀 때 제일 필요한 게 '반례'라 생각한다ㅠㅠ 

https://www.acmicpc.net/board/view/80928

 

글 읽기 - [Python]반례 부탁드립니다.

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

'프로그래밍 언어 > C언어' 카테고리의 다른 글

백준 > 2164 카드2  (0) 2022.02.04
백준 > 2292 벌집  (0) 2022.02.01
백준 > 2108 통계학  (0) 2022.01.12
백준 > 1018 체스판 다시 칠하기  (0) 2022.01.11
백준 > 11050 이항 계수 1  (0) 2022.01.07