[BOJ] 2231 분해합

1 분 소요

완전탐색 예제

문제


문제 풀이


문제 리뷰

처음에 문제를 제대로 이해하지 못해서 고생했다.
그래서 여러 블로그 포스팅을 참고했다.
하지만 다들 너무 쉬우셨는지 설명이 많지 않았다…(또륵)

245의 분해합은 256(=245+2+4+5)이 된다.

문제에서 이 것을 보고 처음에 input 값을 245로 생각해서 더 헤맸던 것 같다.
내 눈높이에 맞는 설명으로 차근차근 정리해보겠다!

예를 들어, input은 256이고, 256을 만든 생성자(245)를 찾는 것이다.
생성자의 분해합이 input이 되는 것이다. (245 + 2 + 4 + 5)

그래서 나는 input 값을 시작으로 감소시키며 완전 탐색을 했다.
input 값보다 큰 생성자가 나올 수 없다고 생각했기 때문이다.

분해합을 구하는 것은 따로 메소드로 분리시켰다.
같이 두려고하니 더 헷갈려서 따로 뺐다.
저번에 문제해결기법 수업에서 자릿 수 문제를 다뤄서 이 부분은 비교적 쉬웠다.

n % 10은 일의 자리 숫자를 추출해오는 것이고,
n / 10은 일의 자리 숫자를 자르는 것이다!
(다들 이 것을 이해하는게 쉬울 수도 있으나 나는 배울 때 조금 헷갈렸다..^^)
결국 자릿수를 다 돌때까지 이것을 반복하여 sum 값에 더하는 것이다.
기본적으로 sum은 본 숫자로 초기화했다.

여기까지만 하면 끝..!이 아니다.
처음에 나는 부분합과 input 값이 같으면 break문을 사용하여 탈출하도록 했다.
하지만 그래서는 안됐다!
왜냐면 가장 작은 생성자를 구해야하기 때문이다.
그래서 가장 작은 생성자를 찾을 수 있도록 break문을 제거했더니
원하는 결과를 얻을 수 있었다!

TMI

처음에 한참 문제를 이해 못해서 너무 우울했다..
나는 바보인가,,,
그래서 그냥 미루고 게임이나 하러갈까했지만!!!
그래도 마음을 다시 먹고 풀어봤다.
다행히 내가 이해하고 나만의 코드로 짤 수 있어서 너무 뿌듯하다!

1일 1알고리즘 완료🤓

댓글남기기