본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 1065번 자바 문제 답/해설(한수 문제)

by 리드민 2021. 12. 1.
반응형

[1] 백준 카테고리
단계별로 풀어보기

함수

3단계 1065번 문제

한수

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

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


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


3. 예제 입력 1

110


4.예제 출력 1

99

 

5. 예제 입력 2

1

 

6. 예제 출력 2

1


[3] 정답

1. 정답 해설 미포함

package test_p1;
import java.util.Scanner;

public class Main {
 
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		System.out.print(math(in.nextInt()));
		in.close();
	}
 
	public static int math(int num) {
		int count = 0; // 한수 카운팅
 
		if (num < 100) {
			return num;
		}
 
		else {
			count = 99;
			if (num == 1000) { // 예외처리 필수
				num = 999;
			}
 
			for (int i = 100; i <= num; i++) {
				int h = i / 100; // 백의 자릿수
				int t = (i / 10) % 10; // 십의 자릿수
				int o = i % 10;

				if ((h - t) == (t - o)) { // 각 자릿수가 수열을 이루면
					count++;
				}
			}
		}

		return count;
	}
}


2. 정답 해설 포함

package test_p1;
import java.util.Scanner;
// java.util.Scanner를 import 한다.

public class Main {
// 접근제어자 public으로 Main class를 선언한다.
 
	public static void main(String[] args) {
	// 접근제어자 public으로 메모리에 상주하고 리턴 값이 없이 main 함수를 선언
		Scanner in = new Scanner(System.in);
		// Scanner 객체 in를 선언
		
		System.out.print(math(in.nextInt()));
		// 함수 math(in.nextInt())의 결과값을 출력
		in.close();
		// 객체 in 사용을 종료
		
	}
 
	public static int math(int num) {
	// 접근제어자 public으로 메모리에 상주하게 함수 math를 선언
		int count = 0; // 한수를 카운팅하는 함수를 선언하고 0으로 초기화한다
 
		if (num < 100) {
		// 변수 num이 100 이하일때 괄호안의 코드를 실행시킨다
			return num;
			// num 값을 return한다.
		}
 
		else {
			count = 99;
			// 변수 count에 값 99를 저장
			if (num == 1000) { // 예외처리 필수
			// 변수 num에 저장된 값이 1000이면 괄호안의 코드를 실행
				num = 999;
			}
 
			for (int i = 100; i <= num; i++) {
			// for문 선언
				int h = i / 100;
				// 변수 h를 선언 백의 자릿수를 구한다.
				int t = (i / 10) % 10;
				// 변수 t를 선언 십의 자릿수를 구한다.
				int o = i % 10;
				// 변수 o를 선언 일의 자릿수를 구한다.

				if ((h - t) == (t - o)) {
				// 백의 자리와 십의 자리의 차와 십의 자리와 일의 자리의 차가 수열을 이루면
					count++;
					// count 변수에 저장된 값이 1이 증가한다.
				}
			}
		}
		return count;
		// count 변수에 저장된 값이 return 된다.
	}
}
반응형