백준/단계별로 풀어보기
백준 - 단계별로 풀어보기 - JAVA (5단계 : 함수 / 3문제) (2022.12.25 일)
MoveForward
2022. 12. 25. 02:07
1단계 : 15596번 / 정수 N개의 합
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.
- Java: long sum(int[] a); (클래스 이름: Test)
- a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
- 리턴값: a에 포함되어 있는 정수 n개의 합
public class Test {
long sum(int[] a){
long sum = 0;
for (int i=0; i<a.length; i++){
sum += a[i];
}
return sum;
}
}
2단계 : 4673번 / 셀프 넘버
public class Main{
public static void main(String args[]){
boolean[] check = new boolean[10001];
for(int i=1; i<10001; i++){
int a = d(i);
if (a < 10001){
check[a] = true;
}
}
for(int i=1; i<10001; i++){
if (!check[i]){
System.out.println(i);
}
}
}
public static int d(int n){
int sum = n;
while (n != 0){
sum += (n%10);
n = n/10;
}
return sum;
}
}
** 1~10000까지의 수를 생성자로 하여 다음 숫자를 도출하는 함수 => d()
d()를 사용하여 1~10000까지 생성자를 가지는 숫자들을 boolean 배열을 통해 표시한다.
"표시되지 않은 숫자 = 셀프 넘버" 해당 숫자들을 출력한다.
3단계 : 1065번 / 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
boolean[] check = new boolean[N+1]; // 1~N까지 check 공간
int count = 0;
for (int i=1; i<N+1; i++){
check[h(i)] = true;
}
for(int i=1; i<N+1; i++){
if (check[i] == true){
count ++;
}
}
System.out.println(count);
}
public static int h(int n){
// 세자리 수 인 경우
if (n > 99){
int k = n;
int a = k%10; // 일의 자리수
k = k/10;
int b = k%10; // 십의 자리수
int c = k/10; // 백의 자리수
if ((c-b)==(b-a)){
return n;
} else{return 0;}
}
else{ return n;} // 한 자리, 두 자리인 경우
}
}
n이 1~99까지인 경우는 모두 한수 이다.
왜냐하면 1~9인 경우는 길이가 1인 수열이므로 9개 모두 한수이고,
10~99는 길이가 2인 수열인데, 예를 들어 50의 경우 첫항이 5, 마지막항이 0,이고 공차가 -5인 등차수열이라고 할수있기 때문이다. 자세한 설명참고는 아래 링크를 통해 확인할 수 있다.
https://www.acmicpc.net/board/view/25689
글 읽기 - 문제 이해가 안됩니다
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net