728x90
안녕하세요 Coding-Knowjam입니다.
백준 온라인 저지에 있는 4673번 셀프 넘버 문제를 풀어보겠습니다.
문제에 대한 링크는 아래에 있으니 문제를 먼저 읽고 와주시길 바랍니다.
https://www.acmicpc.net/problem/4673
1. 문제 설명
문제에서 요구하는 바는 10000까지의 숫자 중 셀프 넘버를 출력하는 것입니다.
셀프 넘버는 문제에서 알려준 대로 생성자가 없는 숫자입니다.
배열의 인덱스를 각각의 숫자로 사용해서 구하면 쉽게 구할 수 있습니다.
딱히 어려운 부분은 없으므로 바로 코드로 작성해보겠습니다.
2. Java로 문제 풀이
package study.blog.codingnojam.algorithm.boj;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class BOJ_4673 {
// 백준온라인저지 4673 셀프 넘버 문제풀이 Java
public static void main(String[] args) throws IOException {
// 출력을 위한 객체
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 0 인덱스 사용안할려고 10001로 길이 줌
boolean[] arr = new boolean[10001];
// 0은 셀프넘버가 아님
arr[0] = true;
// 배열 길이만큼 반복 1부터 시작
for (int i = 1; i < arr.length; i++) {
// d(n)의 값을 저장할 변수
int result = i;
// 각 자리수마다 숫자를 뽑기위해 문자열 배열로 변환
String[] str = String.valueOf(i).split("");
// 문자열 배열의 각 원소는 자리수이므로 하나씩 result에 더 해줌
for (String s : str) {
result = result + Integer.parseInt(s);
}
// 더한 값이 10000보다 작거나 같은 경우
if (result <= 10000) {
// i는 result의 생성자이므로 result는 셀프넘버가 아님
// 배열의 값이 true면 셀프넘버가 아니라는 뜻
arr[result] = true;
}
}
// 배열길이 만큼 반복
for (int i = 0; i < arr.length; i++) {
// 배열의 각 원소값이 false면 셀프넘버임
if (!arr[i]) {
// 출력문에 저장
bw.write(String.valueOf(i));
bw.newLine();
}
}
// 출력
bw.flush();
}
}
작성한 코드의 라인마다 주석을 달아놓았습니다.
주석과 코드를 같이 살펴보시면 이해하는데 크게 어렵지 않으실 겁니다.
감사합니다.
728x90
'Algorithm & Data Structure > 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 3190번(BOJ 3190) 뱀 문제풀이!! (java) (0) | 2021.08.25 |
---|---|
[Algorithm] 백준 12100번(BOJ 12100) 2048(easy) 문제 풀이(Java) (0) | 2021.08.22 |
[Algorithm] 백준 9012(BOJ 9012) 괄호 문제풀이 (Java) (0) | 2021.08.10 |
[Algorithm] 백준 9095번 (BOJ 9095) 1,2,3 더하기 문제풀이 (Java) (0) | 2021.08.09 |
[Algorithm] 백준 17135번 (BOJ 17135) 캐슬 디펜스 문제풀이 (Java) (0) | 2021.08.07 |
댓글