2장: 의미있는 이름
실습 코드
현재 도서관 코드에서는 적절한 예시가 없음.
예제: 백준 10250번 문제인 "ACM 호텔"의 풀이 코드
t = int(input())
while t > 0:
t = t - 1
h, w, n = list(map(int, input().split()))
floor = 1
room = 1
if h > 1 and w > 1:
floor = (n-1) % h + 1
room = (n-1) // h + 1
elif h == 1:
room = n
elif w == 1:
floor = n
result = floor*100 + room
print(result)의도를 분명히 밝혀라
코드에서 짐작하기 어려운 사항
예제 1에서의
t,h,w,n은 변수의 의도가 불분명하다.floor와room은 왜 1로 초기화되는가?h와w가 1보다 클때 floor와 room은 새롭게 연산된다.h와w가 1일때는 floor와 room에 n 값이 대입된다.
변수의 의도
t: 테스트 케이스h: 호텔의 층수w: 각 층의 방수n: 해당 손님의 방문 순서floor: n번째 손님이 묵을 층room: n번째 손님이 묵을 방 번호
바꾼 이름?
t->totalTestCaseh->heightOfHotelw->widthOfHoteln->customerArrivalNumberfloor->roomFloorroom->roomNumber
totalTestCase = int(input())
for _ in range(0, totalTestCase):
heightOfHotel, widthOfHotel, customerArrivalNumber = list(map(int, input().split()))
roomFloor = 1
roomNumber = 1
if heightOfHotel > 1 and widthOfHotel > 1:
roomFloor = (customerArrivalNumber-1) % heightOfHotel + 1
roomNumber = (customerArrivalNumber-1) // heightOfHotel + 1
elif h == 1:
roomNumber = customerArrivalNumber
elif w == 1:
roomFloor = customerArrivalNumber
result = roomFloor*100 + roomNumber
print(result)값 1의 의미
elif h == 1에서 1은 호텔이 1층일 때SINGLE_FLOOR상수로 정의
elif w == 1에서 1은 각 층의 방이 1호실만 있을 때SINGLE_ROOM_NUMBER상수로 정의
floor와room이 1로 초기화되는 건 출입구와 가장 가까운 방이 101호기 때문!FIRST_FLOOR와FIRST_ROOM_NUMBER정의
SINGLE_FLOOR = 1
SINGLE_ROOM_NUMBER = 1
FIRST_FLOOR = 1
FIRST_ROOM_NUMBER = 1
totalTestCase = int(input())
for _ in range(0, totalTestCase):
heightOfHotel, widthOfHotel, customerArrivalNumber = list(map(int, input().split()))
roomFloor = SINGLE_FLOOR
roomNumber = SINGLE_ROOM_NUMBER
if heightOfHotel > FIRST_FLOOR and w > FIRST_ROOM_NUMBER:
roomFloor = (customerArrivalNumber - 1) % heightOfHotel + 1
roomNumber = (customerArrivalNumber - 1) // heightOfHotel + 1
elif heightOfHotel == FIRST_FLOOR:
roomNumber = customerArrivalNumber
elif widthOfHotel == FIRST_ROOM_NUMBER:
roomFloor = customerArrivalNumber
result = roomFloor*100 + roomNumber
print(result)맥락 개선
Last updated