BOJ 1065
2020-01-25
위 문제는 백준 사이트의 알고리즘 1065번 문제에 관한 설명입니다.
문제
어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.
N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int answer = 0;
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
answer = checkHanNumber(N);
System.out.println(answer);
sc.close();
}
private static int checkHanNumber(int n) {
int check = 99;
int Num = n;
int array[] = new int[3];
if (0 < Num && Num < 100)
check = Num;
else {
for (int i = 100; i <= n; i++) {
array[0] = i % 10;
array[1] = (i / 10) % 10;
array[2] = (i / 100) % 10;
if(i==1000)
break;
if ((array[2] - array[1]) == (array[1] - array[0]))
check++;
}
}
return check;
}
}
일단 제가 푼 소스코드입니다.
예제 5개중에 3개만 넣고 제출을 했더니 실패가 나왔었습니다.
마지막 1000을 고려하지 못했던 것 때문이었습니다.
단순히 array[]를 1 10 100의 자리를 넣다보니 1000일때 한수로 여겨져서 기대값보다 1이 더 높게 나와서 실패한 점이었습니다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt(), i, k, han=0, a[] = new int[3];
for (i = 1; i <= n; i++) {
if (0 < i && i < 100) han = i;
else if (i == 1000) break;
else {
k = 0; int t = i;
while (t > 0) {
a[k] = t % 10;
t /= 10; k++;
}
if (a[0] - a[1] == a[1] - a[2]) han++;
}
}
System.out.println(han);
sc.close();
}
}
[출처] [백준] 1065 - 한수|작성자 occidere
다른 분이 푼 소스코드이다. 해당 문제는 함수단계의 문제였으므로 함수를 활용했으나 저분은 그렇지 않다.
문제에서 함수를 사용하라는 조건은 없었으니 상관은 없지만 저분이 푼 것이 소스코드가 조금 더 깔끔해보인다.
쉬운 문제였지만 최대한 간결하게 코드를 짤 수 있도록 고려해야겠다는 생각이 다시 한번 들었다.