코딩테스트/Baekjoon

[백준/JAVA] 1065번: 한수

희동츄루리 2023. 8. 16. 14:05
728x90
import java.util.Scanner;

public class Main{
	
	public static void main (String[] args) {
	
		Scanner sc = new Scanner(System.in);
		
		System.out.println(hansu(sc.nextInt()));
		
		sc.close();
		
	}
	
	public static int hansu(int num) {
		int cnt = 0;
		
		if(num<100) {
			
			return num; // 1~99는 99개의 한수로 친다. -> 예제) 입력 : 101, 출력 : 99
			
		}else {
			
			cnt = 99; // 100 이후의 숫자는 99 + x 로 생각한다.
			
			for(int i=100; i<=num; i++) { // i가 100부터 num(입력한 숫자)까지의 범위
				
				int a = i/100; // 백의 자리 숫자 : 210/100 = 2
				int b = (i/10)%10; // 십의 자리 숫자 : (210/10)%10 = 1
				int c = i%10; // 일의 자리 숫자 : 210%10 = 0
				
				if((a-b)==(b-c)) { // 등차수열의 규칙을 성립하는 경우, 99에 하나씩 더해준다.
					cnt++;
				}
			}
		}
		
		return cnt; // 전체 등차수열의 조건을 성립하는 숫자의 개수를 반환한다. 
	}
}
  • 등차수열로 성립되는 숫자?
    • 1~99 : 99개
    • EX) 입력 : 210 ⇒ 출력 : 105
      • 1~99의 99 개와 210, 111, 123, 135, 147, 159 의 6개 더해서 105개!
  • 한수를 구하는 함수에서 하는 일!
    1. 1 ≤ num ≤ 99 → num 출력
    2. num ≥ 100 → 백, 십, 일의 자리로 나누어 각 자리 수가 등차수열의 조건을 성립하는지 확인
    3. (99 + 등차수열을 만족하는 수의 개수) 반환