- 문제: https://www.acmicpc.net/problem/4673
- 분류: 수학, 구현, 브루트포스
- 난이도: S5
- 소요시간: 10m
- 자아성찰:
- 문제를 보았을 때 시간복잡도는 O(n)으로, 브루트포스로 풀 수 있음을 알았다. (n <= 10000)
- 문제에서 메서드 d()를 잘 설명해주고 있어서 구현은 어렵지 않았다.
- 메모리를 아낄 수 있도록 굳이 int 배열이 아니라 boolean 배열로 처리했어도 될 것 같다. (T/F로 처리 가능)
public class B_4673 {
static int[] arr = new int[10001];
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
// d(i) 함수의 결과로 나온 값은 셀프 넘버가 아님 (i가 생성자임을 의미)
for (int i = 0; i <= 10000; i++) {
int d = d(i);
if (d <= 10000) {
arr[d(i)] = -1;
}
}
for (int i = 0; i <= 10000; i++) {
if (arr[i] != -1) {
sb.append(i).append("\n");
}
}
System.out.println(sb);
}
public static int d(int i) {
int a = i / 1000;
int b = (i % 1000) / 100;
int c = (i % 100) / 10;
int d = i % 10;
return i + a + b + c + d;
}
}
'Algorithm' 카테고리의 다른 글
백준[16435] - 스네이크버드 (1) | 2024.01.29 |
---|---|
백준[1543] - 문서 검색 (0) | 2024.01.27 |
백준[1436] - 영화감독 숌 (1) | 2024.01.24 |
백준[3980] - 선발 명단 (Kotlin) (2) | 2022.01.09 |
백준[10974] - 모든 순열 (Kotlin) (0) | 2022.01.06 |