한수1065

LJM·2023년 1월 18일
0

백준풀기

목록 보기
40/259

시간복잡도 3651

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

문제를 읽고 이해가 안되서 검색해서 이해하였다.
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 의미는 예를 들어
X 가 1 이라면 한수이다. 한자리 숫자는 길이가 1인 등차수열이라고 한다. 1~9 까지 다 그렇다
X 가 12 이라면 한수이다. 길이가 2이고 공차가 1인 등차수열이다
X 가 24 이라면 한수이다. 길이가 2이고 공차가 2인 등차수열이다. 두자리 숫자도 그냥 다 등차 수열이다
X 가 246 이면 한수이다. 길이가 3이고 공차가 2인 등차수열이다.
X 가 253 이면 한수가 아니다. 2와5는 3의 차이가 5와3은 -2의 차이가 나므로 등차수열이 아니다

배열을 1001 개 선언해서 1부터 1000 까지 한수의 개수를 계산해서 저장하였다

배열 1~99 는 그냥 for문 돌리면서 1~99 저장하면 된다
100 부터는 한수인지 아닌지 판단하는 로직에 따라
한수인가? 1) 맞으면 이전배열에 저장해놨던 값에 + 1 저장
2) 아니면 이전배열값을 현재배열에 저장

한수 인지 판단하는 로직은 숫자의 각 자릿수를 배열에 하나씩 따로 저장하고 for문 돌리면서 숫자간의 차이를 구하고 비교하는 방식으로 하였다

import java.io.*;

public class Main {

    static int[] hansuArr = new int[1001];

    public static void main(String[] args) throws IOException
    {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] tempArr = new int[4];

        for(int i = 1; i < hansuArr.length; ++i)//100~ 1000  약 4500 = 900 * 5
        {
            if(i < 100)
                hansuArr[i] = i;
            else
            {
                int copy = i;
                int j = 0;
                while(copy != 0)
                {
                    tempArr[j++] = copy % 10;
                    copy/=10;
                }

                int diff = 0;
                int diff2 = 0;
                boolean isHansu = true;
                for(int k = 0; k+1 < j;++k)
                {
                    diff2 = tempArr[k] - tempArr[k+1];

                    if(k == 0)
                    {
                        diff = diff2;
                    }
                    else if(diff == diff2)
                    {
                        diff = diff2;
                    }
                    else
                    {
                        isHansu = false;
                        break;
                    }
                }

                if(isHansu)
                    hansuArr[i] = hansuArr[i-1] + 1;
                else
                    hansuArr[i] = hansuArr[i-1];
            }

        }


        int N = Integer.parseInt(br.readLine());

        System.out.println(hansuArr[N]);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글