250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 완탐
- java
- 23288
- BFS
- 정올 1620
- 전화번호속의암호
- 재귀함수
- 알고리즘
- 코테준비
- 파티션 크기 조정
- 백준15652
- 삼성역테
- 정보처리기사
- 중복순열
- Bfs와DFS
- 코테
- 에라토스테네스의채
- 자바
- 백준13458
- 자바 코테
- 볼륨 만들기
- 순열
- 알고리즘개념
- 백준
- 완전탐색
- 주사위굴리기2
- 백준2251
- D드라이브생성
- 중복조합
- N과M
Archives
- Today
- Total
뚱땅뚱땅
[문제] 백준 4673번 셀프넘버 본문
728x90
* 단계별로 풀어보기 : 함수
public class Main {
public static void main(String[] args) {
boolean check[] = new boolean[10000];
int self = 0;
for(int d=0;d<10;d++) {
for(int c=0;c<10;c++) {
for(int b=0;b<10;b++) {
for(int a=0;a<10;a++) {
self = f(d,b,c,a);
if(self>=10000) continue;
check[self] = true;
}
}
}
}
for(int i=0;i<10000;i++) {
if(!check[i])
System.out.println(i);
}
}
static int f(int d, int c, int b, int a) {
return 1001*d + 101*c + 11*b + 2*a;
}
}
첨에 이게 뭔말이냐 했지만! 손으로 써가면서 이해해서 단순한 공식을 만든 줄 알았으나.... 이렇게 푸는건 너무 시간이 오래걸리는 문제가 있다........ 너무 주먹구구식으로 푼 것 같다.
아래 코드가 정답이다.
while문 내의 코드를 이해해야한다. 나는 자리수를 모르는데 어떻게 코딩하지? 라는 생각으로 공식을 세워보고 저렇게 for문에 다 때려넣은건데....
while문은 num의 일의 자리수마다 더하고, num을 10으로 나누면 하나씩 자리수가 땡겨진다는 걸 표현한다.
public static int d(int num) {
int sum = num;
while(num !=0) {
sum += (num%10);
num /=10;
}
return sum;
}
public static void main(String[] args) {
boolean[] check = new boolean[10001];
for(int i=0;i<10001;i++) {
int n =d(i);
if(n<=10000)
check[n] = true;
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<10001;i++) {
if(!check[i])
sb.append(i).append("\n");
}
System.out.println(sb);
}
그리고 StringBuiler랑 StringBuffer 사용에 익숙해지자!
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[문제] 백준 1152번 단어 공부 (0) | 2021.01.19 |
---|---|
[문제] 백준 1065번 한수 (쉬운 문제를 너무 복잡하게 풀었다) (0) | 2021.01.19 |
[문제] 백준 8958번 OX 퀴즈 (0) | 2021.01.19 |
[문제] 백준 4344번 평균은 넘겠지 (0) | 2021.01.19 |
[문제] 백준 1110번 더하기 사이클 (0) | 2021.01.19 |
Comments