백준 2292 : 벌집

C# 2021. 2. 2. 23:55

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.
입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

:: 성공

 

: 설명 :

> 속도가 중요함 = 공식을 써서 풀라는 것...

> 처음에 시도한 것(실패) : 6이란 관련 있어보여서 받은 숫자의 6을 나눈 것을 토대로 뭔가 해볼 수 없나 공식 짜봄

>> 그랬더니 2 / 6 = 0, 7 / 6 = 1 이라는 동일 방 개수임에도 다른 문제가 생김

> 나중에 바꾼 것(성공) : 아예 범위 숫자를 파악해서 확인
>> 1,(+6) 2-7, (+12) 8-19 등 

 

: 개선점 : 수학에 대한 이해

using System;

namespace Math00
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Read
            string input = Console.ReadLine();

            // :: Set
            int checkNumber = int.Parse(input);

            // :: Find
            int count = 1;
            int range = 1;
            while(true)
            {
                // ::: EXIT
                if (checkNumber <= range)
                    break;

                int sixMultiple = 6 * count;
                count += 1;

                range += sixMultiple;
            }

            // :: Print
            string print = count.ToString();
            Console.WriteLine(print);
        }
    }
}

 

 

'C#' 카테고리의 다른 글

GetHashCode  (0) 2021.04.23
백준 1193 : 분수찾기  (0) 2021.02.03
백준 1712 : 손익분기점  (0) 2021.02.01
백준 1316 : 그룹 단어 체커  (0) 2021.01.30
백준 2941 : 크로아티아 알파벳  (0) 2021.01.29
블로그 이미지

RIsN

,