백준 2292번 벌집

문제 : https://www.acmicpc.net/problem/2292

Key Point

한 단계 씩 증가할 때마다 7,19,37,61 이렇게 6의배수 만큼 증가한다.
한 단계 이내에 있는 방들은 어떻게 지나가도 모두 같은 방횟수를 가진다.

My Code

Target  = int(input())

step = 1
last_room = 7

while True :  #벌집의 정확한 갯수를 모르기 때문에 무한 루프를 이용한다.
    
    if Target == 1: # 조심해야할 포인트 
        print(1)
        break
    
    if Target <= last_room: # 한 겹의 마지막 방번호보다 작으면 step(단계)에서 +1을 해 출력
        print(step+1) # +1 을 하는 이유는 시작 방과 끝방을 포함해야 하기때문
        break
    
    else:  # 타겟방보다 끝방이 크면 
        step+=1 # 다음 단계로 넘어간다.
        last_room += 6*step # 다음단계로 넘어가고 다음단계의 끝방을 대입한다.

Compare Code

n = int(input())

nums_pileup = 1  # 벌집의 개수, 1개부터 시작
cnt = 1
while n > nums_pileup :
    nums_pileup += 6 * cnt  # 벌집이 6의 배수로 증가
    cnt += 1  # 반복문을 반복하는 횟수
print(cnt)

개선점

  • if 문을 3번이나 사용할 필요없이, while 문을 무한 루프로 돌리지말고, while 조건 : 을 이용해 해결하는 것도 방법이다. while 의 특성인 조건이 참일때만 실행! 거짓일 땐 실행하지 않고 while 다음줄로 넘어가는 특성을 이용하자.
  • while 문은 for문과 다르게 실행이 되고 빠져나온다.
  • 마지막 방번호는 몰라도 된다. 6의 배수인 것만 활용하자 -> 필요한 값만 도출하자

참조 : https://ooyoung.tistory.com/82

좋은 웹페이지 즐겨찾기