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로 줄었다.
[문제점]
머리속에 하나하나 다 비교를 해봐야한다는 고정관념에 사로잡혀 다른 방법은 생각하지도 못했다.
아직 생각하는 힘이 많이 부족한 것 같다. 공식에 대입해 나온 값들은 생성자를 가진다라는 생각만 하였어도
쉬운풀이와 효율적인 코드로 정답을 맞출 수 잇었을 것이다. 문제가 풀리지 않을 때나 풀어놓고도 찝찝할 때는
문제를 다시 읽어보고 처음부터 시작하는 것도 좋겠다는 생각을 하게 되었다.
'백준' 카테고리의 다른 글
백준 1712번[C언어] : 손익분기점 (0) | 2022.03.07 |
---|---|
백준 1065번[C언어] : 한수 (0) | 2022.03.05 |
백준 4344번[C언어] : 평균은 넘겠지 (0) | 2022.03.04 |
백준 8958번[C언어] :OX퀴즈 (0) | 2022.03.04 |
백준 2577번 [c언어] : 숫자의 개수 (0) | 2022.03.03 |
댓글