본문 바로가기
알고리즘/백준 - 파이썬

백준) 2292번 벌집 문제 (파이썬)

by AI Sonny 2022. 6. 7.
728x90

문제) 위의 그림과 같이 육각형으로 이루어진 벌집이 있다.

 

그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다.

 

숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지

 

(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오.

 

예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

a = int(input())
cnt = 0
plus = 0
route = 1

while True:
    cnt += 1
    route = route + (6*plus)
    if a <= route:
        print(cnt)
        break
    else:
        plus += 1

이번 문제는 일정한 패턴을 찾는 것이 중요하다.

 

벌집을 손으로 계산해보니 숫자가 늘어나면서 6을 곱하면서 증가되는 규칙을 발견하였다.

 

그래서 일단 a의 입력값을 선언하고, cnt와 plus를 통해 초기화를 해주고, route를 통해 계산하였다.

 

이번에는 while 문을 사용하였고, cnt가 1씩 증감이 되고, route에 (6*plus)한 값을 더했다.

 

그 후 if문을 사용하여 a가 route보다 작거나 같으면 cnt를 출력하고, break하였다.

 

그리고 조건이 맞지 않는 것은 plus에 1을 더하고 반복하도록 하였다.

 

이번 문제는 머리가 많이 아팠다. 브론즈 문제는 뭔가 풀 수 있을 것 같은 느낌인데

 

실버 문제는 문제를 이해하는데 시간도 걸리고, 어떻게 짜야할지 감이 잘 안온다.

 

더 많이 연습해야겠다....

 

이해가 안되시거나 틀린 정보는 댓글로 알려주시면 감사하겠습니다!

728x90

댓글