땃지
ing
땃지
전체 방문자
오늘
어제
  • 분류 전체보기 (100)
    • 공부 (37)
      • Java (4)
      • Spring Boot (4)
      • 자료구조 (4)
      • CS (18)
      • JSP (6)
      • Git (1)
    • 문제 해결 (60)
      • 백준 (51)
      • 프로그래머스 (9)
    • 프로젝트 (3)
      • 당신의 안목 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Contact

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
땃지
문제 해결/백준

[Java]백준 #1065 한수

2021. 9. 13. 18:08

 

 

1065번: 한수

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

www.acmicpc.net

[문제]

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


package lv6;

import java.util.Scanner;

public class No1065 {
	
	public static int Hansu(int n) {
		int cnt=0, result=0;  //cnt=100이상 한수 개수, result=최종 한수 개수
		
		if(n<100) {  //두자리수는 수열을 이루지 못해 모두 한수
			result = n;
		}else {
			for(int i=100;i<=n;i++) {
				int hun = i/100;
				int ten = (i/10)%10;
				int one = i%10;        //각 자리수의 숫자 추출
					
				if((ten-one)==(hun-ten)) {  //등차수열인지 판별
					cnt++;  //맞다면 cnt 증가
				}				
			}
			result = cnt+99;  //100이상 한수 개수 + 1~99는 모두 한수
		}
		return result;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		int han = Hansu(n);
		System.out.println(han);

	}

}

한수를 구하는 함수 내부는 입력하는 수 n이 99 이하일 때, 100 이상일 때로 경우를 나누어 코딩했다.

99이하인 경우, 두자리 수이므로 숫자들이 등차수열을 이루는지 판별할 수 없어서 무조건 한수이다.

100 이상인 경우, 나머지 연산을 통해 세 개의 변수에 각 자리수를 저장했다.

이후 조건문에서 (백의자리-십의자리) 값과 (십의자리-일의자리)값이 같은 경우 cnt 값을 증가시켜 한수의 개수를 계산한다. 이때 cnt값은 100이상의 숫자에 대한 한수 개수이다. 따라서 총 한수 개수인 result에 1~99 범위의 한수 개수 99를 더해주어야 최종 한수 개수를 구할 수 있다.

 

위의 한수 구하는 함수는 별도의 함수를 만들지 않고 main내부에서의 코딩으로도 가능하지만, 알고리즘 문제가 함수 단원에서 출제되어 함수로 작성했다.

저작자표시 비영리 변경금지 (새창열림)
    '문제 해결/백준' 카테고리의 다른 글
    • [Java]백준 #11720 숫자의 합
    • [Java]백준 #11654 아스키 코드
    • [Java]백준 #4673 셀프 넘버
    • [Java]백준 #4344 평균은 넘겠지
    땃지
    땃지

    티스토리툴바