일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 홈CCTV
- Ai
- #FIFAONLINE4
- 안녕 디지몬
- 자바 인강
- 랜덤
- 아두이노#작품#사료급식기
- 내일배움카드
- fifaonline4
- 피온4
- 안드로이드#앱만들기#알바
- K디지털크레딧
- 불끌때
- 강아지 스마트 펜스
- 랜덤스쿼드
- 강아지 #박스집 #복층
- fifaonline
- 패스트캠퍼스
- 안드로이드
- 부의감각
- D-ID
- 독서감상문
- 박스#강아지집#만들기
- 안드로이드 #앱개발#계산기
- Java & SpringBoot로 시작하는 웹 프로그래밍
- 바이트디그리
- 부르지마세요
- 스쿼드 메이커
- 혼술 술자리 인싸앱
- 안드로이드 그림판#그림메모장#낙서장
- Today
- Total
LC Studio
백준 4673 셀프 넘버 JAVA 본문
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.
양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.
예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
함수를 활용하여 해결하는 문제이다.
어떻게 처리할 수 있을까 고민해보다, 아직 함수가 익숙하지도 않고 생각이 잘 나지않아 다른 블로그를 참고하여 풀었다.
주석을 보면 이해할 수 있을 것이다.
public class Main{
//메인 함수
public static void main(String[] args){
boolean[] check = new boolean[10001];
for(int i=0;i<10001;i++){ //1~10000의 수를 한번씩 호출
int n = d(i); //d(int number)함수를 통해 sum값(Self Number)을 받아옴
if(n<10001){ //1~10000범위 사이의 Slef Number을 check[] boolean 배열에 true로 담음
check[n] = true;
}
}
for(int i=0;i<10001;i++){
if(!check[i]){ //1~10000 중 check 배열에 없으면 출력해줌
System.out.println(i);
}
}
}
//함수 선언
public static int d(int number){
int sum = number; //메인 함수에서 받아온 수를 sum에 저장
while(number != 0){ //number이 0이 될때까지...
sum = sum + (number%10); //%10으로 1일자리수 구해서 기존의 sum에 더해줌
number = number/10; //나눗셈으로 1일자리수 삭제
}
return sum;
}
}
처음 생각할 땐 매우 복잡한 문제라고 생각했지만, 다른 블로그에서는 굉장히 깔끔하고 간단하게 풀어내었다.
내가 스스로 푼 대부분의 문제는 복잡하다.
처음부터 간결하게 풀 수 있다는 기대를 버려야 할 것 같다.
지속적으로 복습하며 코드를 더욱 간결하게 만들어야겠다.
'Java > 백준 알고리즘' 카테고리의 다른 글
백준 1157 단어공부 (Java) (0) | 2022.03.17 |
---|---|
백준 1065 한수 (JAVA) (0) | 2022.03.16 |
백준 4344 평균은 넘겠지 (Java) (0) | 2022.03.15 |
백준 8958번 (JAVA) (0) | 2022.03.14 |
백준 3052 나머지(JAVA) (0) | 2022.03.11 |