https://www.acmicpc.net/problem/10250
N번째 손님이 왔을때 배정되는 방의 번호를 구하는 로직을 생각해보기
Before Refactoring
import sys
T = int(sys.stdin.readline())
for i in range(T):
H, W, N = map(int, sys.stdin.readline().split())
steps = 1
height = 1
width = 1
while steps < N:
if height < H and width < W:
height = height + 1
steps = steps + 1
continue
elif height == H and width < W:
height = 1
width = width + 1
steps = steps + 1
continue
elif height < H and width == W:
height = height + 1
width = 1
steps = steps + 1
continue
# 코드의 논리적 오류를 최소화 하기위한 형식적 코드
else:
pass
print(height * 100 + width)
After Refactoring
함수선언후 행별 숫자를 입력받아 함수호출 및 결과출력
# T Test case W 각 층별 방의 개수, H 건물높이(층수), N 몇번째 손님
# 걷는 거리가 작은 것이 우선순위, 걷는거리가 같을때엔 아래층의 방을 더 먼저
# 101 > 201 > 301 > 401 > ..... 순서대로 배정
import sys
T = int(sys.stdin.readline())
def get_room_number_for_Nth_customer(H, W, N):
global height, width
steps = 1
height = 1
width = 1
while steps < N:
if height < H and width < W:
height = height + 1
steps = steps + 1
continue
elif height == H and width < W:
height = 1
width = width + 1
steps = steps + 1
continue
elif height < H and width == W:
height = height + 1
width = 1
steps = steps + 1
continue
# 코드의 논리적 오류를 최소화 하기위한 형식적 코드
else:
pass
return height, width
for i in range(T):
H, W, N = map(int, sys.stdin.readline().split())
get_room_number_for_Nth_customer(H, W, N)
print(height * 100 + width)
일단 쓰면서 로직을 구현하고, 시간이 오래 걸릴것 같으면
과감히 다른 로직을 구현하자
알고리즘을 구현하는데 너무 시간이 오래걸린다
다른 방향으로 생각하는 것도 중요하지만, 시간을 절약하는 것도 매우 중요하다.
10분내외로 생각하고 알고리즘 구현하는 것까지 가능하도록 꾸준히 연습해보자.
코드에 대한 이해가 우선이다. sugar syntax보다는 sugar logic!