hahn

단계별로 풀어보기(함수) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(함수)

hahn 2021. 8. 22. 21:27
728x90
반응형


1. 정수 N개의 합

문제가 길어서 뭐지 했는데 언어 별로 나눠둔 것

 

문제라고 올려둔 거 같지는 않다.


2. 셀프 넘버

셀프 넘버는 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의한다.

처음 문제를 읽고 와... 이걸 어떻게 식으로 만들지 하고

 

갑자기 난이도가 상승함에 난 진짜 아무것도 아니구나 싶었다..

 

일단 내가 얻을 수 있는 힌트는 문제에서 100보다 작은 셀프 넘버와

 

이 출력 예제이다.

 

대충 보니 1의 자리 제외하고는 11이 더해진다는 것을 알 수 있었다.

 

그래서 어.. 쉽게 풀리겠는데 하고

실패

제출 눌렀는데 어림도 없지 ㅋㅋㅋㅋ

 

그래서 뭐가 문제인지 찾아봤는데

 

출력 예제의 마지막 숫자를 보니 9997이 아닌 9993이 옳은 출력이라는 거다.

 

그래서 3자릿 수나 4자릿 수로 넘어가면 뭔가 좀 달라질 수 있겠다고

 

생각했고, 무지성으로

 

4 자릿 수의 생성자를 적어보았다.

 

원래 생각대로라면 임의로 범위를 잡았을 때, 11개 중 1개는 생성자가 없어야 하는데

 

생성자가 있는 거다. 그래서 그냥 생각을 바꿨다.

 

그냥 전부 다 체크하는 걸로 생각을 바꿨다.

 

사실 처음에 이렇게 할까 생각했는데 좀 수학적으로 풀어보고자

 

위의 방법으로 접근했던 거였다. 물론 이게 제한 시간 안에 풀어질까도 의문이었다.

 

근데 됐다......

 

혹시 수학적으로 해결하신 분 있으면 댓글 좀..


3. 한수

한수는 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수를 말한다.

음 그냥 무난하게 풀었는데

 

arr[2] = number / 100;
number %= 100;
arr[1] = number / 10;
number %= 10;
arr[0] = number;

이 부분 for문으로 만들려다가 뭔가 복잡할 거 같아서

 

그냥 다 적은 게 좀 아쉽긴 하다.

 

키포인트는 등차수열의 정의에 있는 거 같다.

 

등차수열의 정의를 완전하게는 잘 모르지만

 

입력 예제와 출력 예제를 보면

 

1자릿 수와 2자릿 수는 그냥 등차수열로 간주하나 보다.

 

그래서 그 부분은 그냥 카운트되게 하였고,

 

이제 세 자릿 수를 어떻게 판별하냐였다.

 

그냥 나누고 몫을 구하는 과정으로 각 자릿 수를 구했고,

 

이를 비교했다.

728x90
반응형