[백준/BOJ] 2231번 분해합 (C/C++) | 각 자릿수 더하기
브론즈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