이카's
article thumbnail
Published 2020. 10. 6. 19:58
Baekjoon #2292번 벌집 [Python] BOJ

www.acmicpc.net/problem/2292

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌��

www.acmicpc.net


문재해석

처음 보는순간 수열이라는 것을 쉽게 발견 할 수 있다.
솔직히 백준 수학 알고리즘 수학 1 파트를 풀고 있지만 규칙은 어렵지않게 발견했지만
구현이 쉽지가 않다.

이번에도 조금 힘들었다.

조건1) room은 초기방 숫자가+6씩 수열로 증가 할때마다 room +1 씩 해주면 된다.

코드를 풀어보자면

처음 숫자가 1번 일때는 그대로 출력 // #1번째 방
초기값을 7로 잡아서 구하고자하는 값이, 예를들어 6일때 6 <= 7 이므로 room+1 한 뒤 출력 // #2번째방
그 뒤부터는 firstnum+6씩 while문을 돌릴때 마다 더하는 것이다. 그리고 room+1 

하지만 코드가 조금 길어 짧게 하는 방법이 없을까 고민했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
= int(input())
 
room = 1
firstnum = 7
plus = 6
while True:
    #1번째 방인 경우
    if n == 1:
        break
    #2번째 방인 경우
    if n <= firstnum:
        room += 1
        break
    #3번째 이상부터 7에 +6씩 계속 증가해준다.
    else:
        plus += 6
       firstnum += plus
        room += 1
print(room)

 


어떻게 하다보니까 짧아졌는데,

초기값을 1로 하고 풀어봤다.

#1 n = 1 >>> break 걸려서 room 값 1 출력
#2 n = 2 >>> if문이 한번 돌아간다. room + 1 후 출력

생각보다 쉽게 나와서 신기했다.

1
2
3
4
5
6
7
8
9
10
11
12
room = 1
plue = 6
num = 1
= int(input())
while True:
    if n > num:
        num += plue
        plue += 6
        room += 1
        continue
    break
print(room)

 

 

 

 

 

반응형
profile

이카's

@Edan Cafe ☕

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!