1 minute read

X가 한수인지 판별하는 함수를 정의하여 문제를 해결해 봅시다.

문제 : 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

입력 : 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력 : 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

예제입력 :

입력
110
출력
99

FLOW :

  1. Scanner를 통해 입력값을 입력받아서 사용.
  2. 1 ~ 99는 등차수열이다. 따라서 한수이다.
  3. for문을 통해 입력받은 int n만큼 반복해준다.
  4. count와 count의 합계를 구하기 위해 count와 countSum 생성
  5. countSum을 구하기 위해서 for문을 사용했다.
  6. j<100 일때는 모두 한수 이기때문에 count++
  7. j>99 일떄는 체크 함수를 통해 한수인지 아닌지 체크하여야한다.
  8. 따라서 checkNumber라는 함수 생성
  9. 입력값은 1000이하의 자연수이다. 1000은 따로 코드 첫부분에 조건문을 만들어줬다.(1000은 한수가 아님)
  10. 따라서, 입력받은 수의 1,2,3 번째자리를 구하는 식을 통해 조건을 만들어준다.
  11. (1번째자리수 - 2번째자리수 == 2번째자리수 - 3번째자리수) 일때 return 1
  12. 아니면 return 0
  13. 함수를 빠져나온 1또는 0은 카운트에 합산된다.
  14. 카운트의 합계를 출력하면 반복문 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