백준 1065번 한수-JAVA11
X가 한수인지 판별하는 함수를 정의하여 문제를 해결해 봅시다.
문제 : 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력 : 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력 : 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제입력 :
입력
110
출력
99
FLOW :
- Scanner를 통해 입력값을 입력받아서 사용.
- 1 ~ 99는 등차수열이다. 따라서 한수이다.
- for문을 통해 입력받은 int n만큼 반복해준다.
- count와 count의 합계를 구하기 위해 count와 countSum 생성
- countSum을 구하기 위해서 for문을 사용했다.
- j<100 일때는 모두 한수 이기때문에 count++
- j>99 일떄는 체크 함수를 통해 한수인지 아닌지 체크하여야한다.
- 따라서 checkNumber라는 함수 생성
- 입력값은 1000이하의 자연수이다. 1000은 따로 코드 첫부분에 조건문을 만들어줬다.(1000은 한수가 아님)
- 따라서, 입력받은 수의 1,2,3 번째자리를 구하는 식을 통해 조건을 만들어준다.
- (1번째자리수 - 2번째자리수 == 2번째자리수 - 3번째자리수) 일때 return 1
- 아니면 return 0
- 함수를 빠져나온 1또는 0은 카운트에 합산된다.
- 카운트의 합계를 출력하면 반복문 break;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
if (n == 1000) {
n = 999;
}
for (int i = 1; i <= n; i++) {
int count = 0;
int countSum = 0;
for (int j = 1; j <= n; j++)
if (j < 100) {
count++;
} else if (j > 99) {
{
count += checkNumber(j);
}
}
countSum += count;
System.out.println(countSum);
break;
}
}
public static int checkNumber(int n) {
int first = 0;
int second = 0;
int third = 0;
first += n / 100;
second += (n % 100) / 10;
third += n % 10;
if (first - second == second - third) {
return 1;
} else {
return 0;
}
}
}
Leave a comment