일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이분 탐색
- LeetCode 83번
- 임의 정밀도 / 큰 수 연산
- 연결리스트 중복제거
- LeetCode Remove Duplicates from Sorted List in c
- 해시를 사용한 집합과 맵
- 문자열
- 큐
- 사칙연산
- Queue
- KMP알고리즘
- 조합론
- 자료 구조
- 구현
- 실패함수
- 수학
- LeetCode 83 c언어
- 연결리스트 정렬
- 프로그래머스
- 브루트포스 알고리즘
- 정렬
- 스택
- 다이나믹 프로그래밍
- 문자열제곱
- 큰 수 연산
- 재귀
- 유클리드 호제법
- 별 찍기
- 시뮬레이션
- 정수론
- Today
- Total
hahn
단계별로 풀어보기(함수) 본문
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자릿 수는 그냥 등차수열로 간주하나 보다.
그래서 그 부분은 그냥 카운트되게 하였고,
이제 세 자릿 수를 어떻게 판별하냐였다.
그냥 나누고 몫을 구하는 과정으로 각 자릿 수를 구했고,
이를 비교했다.
'코딩테스트 연습 > 백준(JAVA)' 카테고리의 다른 글
단계별로 풀어보기(문자열 - 2) (0) | 2021.08.23 |
---|---|
단계별로 풀어보기(문자열 - 1) 실버 ㅅㅅㅅ (0) | 2021.08.22 |
단계별로 풀어보기(1차원 배열 - 나머지) (0) | 2021.08.22 |
단계별로 풀어보기(1차원 배열) (0) | 2021.08.22 |
단계별로 풀어보기(while문) (0) | 2021.08.21 |