0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • til
  • 자바
  • 코테
  • 카카오
  • CSS
  • Programmers
  • 프로그래머스
  • kakao
  • java
  • 코딩테스트

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

[C언어] 2231번 - 분해합
🧠 Algorithm/[C] BOJ

[C언어] 2231번 - 분해합

2022. 4. 2. 19:25
반응형

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

코드

#include <stdio.h>

int main(void) {

    int i, n, m, cal;
    int check = 0;

    scanf("%d", &n); //n 입력

    for(i = 1; i <= n; i++) { //1부터 n까지 생성자 구하기
        cal = i;
        m = i;

        while(cal > 0) { //일의 자리부터 한 자리씩 쪼개가며 합산
            m += cal % 10;
            cal /= 10;
        }

        if(m == n) { //분해합이 n과 같은 경우 체크
            check = 1;
            break;
        }
    }

    if(check == 1) { //체크 돼있다면 
        printf("%d\n", i); //n과 같은 분해합을 만들었던 i를 출력
    }
    else {
        printf("%d", 0); //생성자가 없다면 0 출력
    }
    

    return 0;
}
반응형
저작자표시 (새창열림)

'🧠 Algorithm > [C] BOJ' 카테고리의 다른 글

[C언어] 1018번 - 체스판 다시 칠하기  (0) 2022.04.04
[C언어] 7568번 - 덩치  (0) 2022.04.03
[C언어] 2798번 - 블랙잭  (0) 2022.04.02
[C언어] 11729번 - 하노이 탑 이동 순서  (0) 2022.04.02
[C언어] 2447번 - 별 찍기 10  (0) 2022.04.02
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바