반응형

1. 문제

- [백준 C#] 1065번 한수 (C#)  (https://www.acmicpc.net/problem/1065)

 

 

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

 

 

2. 문제 포인트

  • 한수 정의 및 알고리즘
    1  =  한수 (숫자가 1개인 등차수열)
    11 ~ 99  =  한수  (숫자가 2개이기에 어떤수든 공차가 될 수 있음, 공차 0~9)
    100 ~ 999  =  각 자리수간의 공차 계산필요
    1000  = 한수 아님 (문제에서 1000까지의 한수 개수를 구해야 하기에 예외 처리 필요)
  • 숫자 하나 입력 받기
  • 한수를 계산하는 함수 만들기
  •  

 

 

반응형

 

 

3. 전체 코드

using System;

namespace S4_01065번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 한수의 개수
            int cnt = 0;

            int a = int.Parse(Console.ReadLine());

            for (int i = 1; i <= a; i++)
            {
                if (calc_num(i))
                {
                    cnt += 1;
                }
            }

            Console.WriteLine(cnt);
        }

        private static bool calc_num(int num)
        {
            // 100보다 작으면 무조건 등차수열이다
            if (num < 100)
            {
                return true;
            }
            // 문제는 1000이하의 숫자
            else if (num < 1000)
            {
                string str_num = num.ToString();

                // 일의 자리 수와 십의 자리수의 차이, 십의 자리수와 백의 자리수의 차이가 같으면 등차수열로 볼 수 있다
                if (int.Parse(str_num[2].ToString()) - int.Parse(str_num[1].ToString()) == int.Parse(str_num[1].ToString()) - int.Parse(str_num[0].ToString()))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            // 1000이 들어온 경우 등차수열되 성립되지 않음으로 무조건 false
            else
            {
                return false;
            }
        }
    }
}

// 1065번 한수
// https://www.acmicpc.net/problem/1065
반응형

+ Recent posts