[백준] 2292번 : 벌집

letsbebrave·2022년 2월 26일
0

codingtest

목록 보기
31/146

문제

개념

기본적으로 해당 문제는 계차수열을 구현할 수 있는지 물어보는 문제이다.

2 ~ 7 - 2개
8 ~ 19 - 3개
20 ~ 37 - 4개
38 ~ 61 - 5개
.
.

6의 배수씩 계속 수가 늘어가고 있는 것을 볼 수 있다.

무한루프

반복횟수가 정해지지 않고 어떤 조건이 성립될 떄까지 반복해서 더이상 안 되는 부분을 찾아야 하기 때문에 무한루프를 사용해주었다.

cf.

  • break문 (사용)

반복문이 실행되고 있는 시점에서 가장 근접한 반복문(루프) 탈출

여러 개의 루프가 중첩된 경우 현재 위치한 루프 하나만 탈출

  • continue문

반복도중 처리를 중단하고 반복문의 시작 위치로 이동

정밀한 제어 구조를 만들 때 사용

출처: https://bymakers.tistory.com/15 [bymakers]

풀이

M = int(sys.stdin.readline())

if M == 1:
    print(1)
else:
    i = 2
    cur = 0
    while True:
        if M < i :
            break
        else:
            cur += 1 # 실수했던 부분으로, 그냥 다음 라인에 cur + 1 해줌 (cur값은 반복 돌 때마다 0으로 리셋되기 때문에 적용되지 않음!!)
            i = i + 6 * cur
    x = (i - 2) // 6
    j = 0
    while True:
        j += 1
        if j * (j+1) // 2 == x:
            break
    
    print(2+j-1)

다른풀이

n = int(input())
room = 1
cnt = 1
 
while n > room:
    room = room + (6 * cnt)
    cnt += 1
print(cnt)
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글