1주차 4번(ACM호텔)
1.문제 링크
https://www.acmicpc.net/problem/10250
2. 풀이 전 계획과 생각
- 배정되는 방의 순서는 이미 정해져있다.
- 손님에 따라 선택할 수 있는 방의 번호를 구현하는 로직을 생각해보기
- 단순 반복문의 나열이 아닌, 최대한 클린코드와 가독성을 생각한 로직구현
2-1. 풀이를 위한 접근방식
N번째 손님이 왔을때 배정되는 방의 번호를 구하는 로직을 생각해보기
2-2. 풀이
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)
4. 풀이하면서 고민했던 점
-
일단 쓰면서 로직을 구현하고, 시간이 오래 걸릴것 같으면
과감히 다른 로직을 구현하자 -
알고리즘을 구현하는데 너무 시간이 오래걸린다
다른 방향으로 생각하는 것도 중요하지만, 시간을 절약하는 것도 매우 중요하다.
10분내외로 생각하고 알고리즘 구현하는 것까지 가능하도록 꾸준히 연습해보자.
- 최대한 획기적이면서 신선한 로직만이 경쟁력!
5. remind
코드에 대한 이해가 우선이다. sugar syntax보다는 sugar logic!
Author And Source
이 문제에 관하여(1주차 4번(ACM호텔)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gyrbs22/1주차-4번ACM호텔저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)