위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 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 |