티스토리 뷰

Q.1065 한수

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

 

입력 :

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

 

출력 :

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

 

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
 
public class Prac {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int answer;
        int[] jari = new int[3];              //각 자리수 저장할 배열
        int N = sc.nextInt();
        
        if(N >= 100) {//N이 세자리수 이상이라면
            answer = 99;                          //100 이전까지는 전부 한수이므로 answer = 99
            for(int i = 100; i <= N; i++) {       //100부터 N까지
                jari[0= i/100; jari[1= (i/10)%10; jari[2= i%10;     //각 자리수 배열에 저장
                int d = jari[1- jari[0];        //두번째 자리수에서 첫번째 자리수를 빼 등차를 구한다.
                if(jari[1+ d == jari[2])        //두번째 자리수 + d의 결과와 세번째 자리수가 같다면 
                    answer++;                     //answer++
            }
        }
        else// 세 자리수 이하는 전부 한수이다.
            answer = N;
        
        System.out.println(answer);
        
    }
}    
cs

 

<실행 결과>

 

해법 :

*두 자리 숫자의 경우 등차수열인지 확인 할 수 없기 때문에 전부 한수로 인정한다. (1 ~ 99 = 한수)

 

*세 자리수 이상부터는 각 자리수가 등차수열을 이루는지 확인하는 과정을 거친다.

(1) 숫자 100 이전전부 한수이므로 변수 answer에 99를 할당한다.

(2) 각 자리수자릿수 배열(jari[])에 저장한다.

(3) '두번째 자리수(jari[1])'에서 '첫번째 자리수(jari[0])'을 빼 등차(int d)를 구한다.

(4) '두번째 자리수(jari[1]) + 등차(int d)''세번째 자리수'의 값이 같다면 answer의 값을 +1 한다.

(5) (2)~(4)과정을 100부터 N까지 반복한다.

 

문제 사이트 및 참고 사이트 : https://www.acmicpc.net/step/5



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글

[백준]1차원 배열 사용하기  (0) 2017.10.08
[백준]1152번, 단어의 개수  (0) 2017.10.07
[백준]4673번 셀프 넘버  (0) 2017.10.02
[백준]if문 사용해보기  (0) 2017.10.01
[백준]for문 사용해보기  (0) 2017.09.29
댓글