[백준/BOJ] 2231번 분해합 (C/C++) | 각 자릿수 더하기

BOJ 2023. 1. 26.

브론즈2 / 분해합

 

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

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

 


 

1. 일단... 수학문제 인것 같아서.

수학적 계산으로 분해합을 도출해낼 방법을 찾고있었음 -> 아니다. for문 돌려서 우르르꽝꽝 다 돌려보는 문제였다.

 

2. while 문 안. (이 글을 쓰게 된 계기)

 

 

젠장할.... 각 자리 숫자를 합하는 건 진짜 엄청나게 많이 해봤어. 

근데 할때마다 개더럽게 했단 말이지? (좀 직관적으로........)

 

예를 들면 어떻게 했냐면..... 현재 자릿수를 어떻게든 저장한다음에 그걸 나눠서 ... 하는....... 그러니까

 

EX. 216 이라면 3자리수니까. int num = 100을 저장하고 / 그걸 나눈 몫(2)를 다시 더하고... num = num / 10; 해서 10으로 만들고... 그리고 num ==0 이면 break 하는 등의 방식을 썼었다. (지금 생각해보면 되게 왜.... 그렇게 더럽게....

 

근데 오늘 깔끔 방법을 하나 알았음!!! [그게 위에 캡쳐임]

 

위 딱 3줄 설명 하면....

 

temp에 들어있는 수를 각 자리별로 더하는 건데...

temp = 198 이라 하자.

temp % 10 = 8; // 맨 뒤의 숫자 -> 이걸 따로 어딘가에 더함 (여기서는 sum)

temp / 10 = 19;

 

-> 다음 루프

temp = 19;

temp % 10 = 9; // 맨 뒤의 숫자-> 이걸 따로 어딘가에 더함 (여기서는 sum)

temp / 10 = 1;

 

이런 식으로 가면 temp = 198이라 했을때 맨 뒤부터 1까지 싹싹 더해서 sum 에 들어간다!!!

 

그러니까 나중에.... 각 자릿 수를 더하는 문제가 나오면

위의 3줄처럼 하면된다!!

 

 

https://github.com/senanim0620/BOJ/blob/main/C%2B%2B/2231%20%EB%B6%84%ED%95%B4%ED%95%A9.cpp

 

GitHub - senanim0620/BOJ

Contribute to senanim0620/BOJ development by creating an account on GitHub.

github.com

 

 

 

인기글

캘린더

    7 / 2025
    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