본문 바로가기
백준

백준 4673번[C언어] : 셀프넘버

by 핫동경 2022. 3. 5.
반응형

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

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

[문제]


[풀이]

● 10000의 크기를 가지는 배열 선언

● 셀프 넘버를 구하는 함수 구현

● return 된 값들은 모두 생성자를 가지는 숫자들이기 때문에 배열[return값]에 1을 저장

● 배열의 값이 0인 값들 출력

 


[첫 번째 시도]

◈ selfnumber함수에서 for문을 통해 인자(n)보다 낮은 값들을 공식에 대입해 하나하나 다 비교하는 방식을 썻다.

    정답이긴 하지만 딱 봐도 시간이 매우 오래 걸리는 작업이다.  200ms나 나왔다.

 

 

 

[두 번째 시도]

 

◈ 위 풀이와 달리 하나하나 다 비교해보지 않았다. 비교하지 않고 selfnuber함수에서 나온 값들은 생성자들을 가지고 

    있다는 생각을 하지 못했다. 즉 나온 값들에만 배열에 1을 저장해주고 안나온 값들에는 배열에 0이 저장되어 있을 

    것이다. 반복문을 통해 배열에 0이 저장되어 있는 값들만 출력하면 된다. 시간 또한 0ms로 줄었다.

    


 

[문제점]

 머리속에 하나하나 다 비교를 해봐야한다는 고정관념에 사로잡혀 다른 방법은 생각하지도 못했다.

 아직 생각하는 힘이 많이 부족한 것 같다. 공식에 대입해 나온 값들은 생성자를 가진다라는 생각만 하였어도

 쉬운풀이와 효율적인 코드로 정답을 맞출 수 잇었을 것이다. 문제가 풀리지 않을 때나 풀어놓고도 찝찝할 때는

 문제를 다시 읽어보고 처음부터 시작하는 것도 좋겠다는 생각을 하게 되었다.

반응형

댓글