백준 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
Author And Source
이 문제에 관하여(백준 2292번 벌집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hantae96/백준-2292번-벌집저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)