[백준 파이썬 10250번]ACM호텔★올림함수를 이용하여 규칙 차근차근 분석해보기★
VERSION 2.0
import sys
T = int(sys.stdin.readline()) #테스트케이스
res = []
for i in range(T):
A = list(map(int, sys.stdin.readline().rstrip().split()))
H = A[0] #층수
W = A[1] #각층의 방수
N = A[2] #손님의 수
son_floor = N%H
if son_floor == 0:
son_floor += H
son_hosu = N//H
if son_hosu < N/H:
son_hosu+=1
res.append("{}{:02d}".format(son_floor,son_hosu))
for i in res:
print(i)
res.append("{}{:02d}".format() 형식 잘 기억해두자!!!!
VERSION 1.0
#W개의 방이 있는 H층 건물
#1<= H,W <=99
#방번호 : YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고
# XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다.
#다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데,
# 102 호는 거리 2 만큼 걸어야 하지만
# 301 호는 거리 1 만큼만 걸으면 되기 때문이다.
# 같은 이유로 102 호보다 2101 호를 더 선호한다.
# N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다.
# 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면,
# H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.
import sys
import math
i=0
room=[]
T = int(sys.stdin.readline())
while i<T:
H,W,N = map(int,sys.stdin.readline().split())#H층 W개방, N번째 도착손님
a = N%H
b = math.ceil(N/H)
if a == 0:
a = H
#print("{}{:02d}".format(a,b))
room.append("{}{:02d}".format(a,b))
i+=1
for i in room:
print(i)
#10%6 = 4
# 100%7 = 6
#6 12 10 ==>72개의 룸
#101 201 301 401 501 601
#102 202 302 402 502 602
#7 24 100
#101 201 301 401 501 601 701 ==>7개
#7개*24 = 158개의 룸
#98개(14번째)
#115 215
#30 50 72 ==>30층 50호실 72번째 손님
#72%30 = 12
#72//30 = 2+1 =3
#2004호
#101~~~~~3001 (30개)
#102 ~~ 3002(30개)
# 103~1003(10개) 1103 1203
#20 40 100
#101~2001(20개)
#105~1905(20*4 + 19) 2005
문제파악 및 알고리즘 분석단계
1. W개의 방이 있는 H층 건물
2. 1<= H,W <=99
3. 방번호 : YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다.
4. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.
5. N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다.
6. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면,
H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.
==================
알고리즘 분석단계
==================
1. 10%6 = 4 100%7 = 6
2. 6 12 10 ==>72개의 룸(H층 W개의 호실, N번째 손님)
101 201 301 401 501 601
102 202 302 402 502 602
.
.
.
3.7 24 100 ==> 7층 24개호실 100번째 손님
101 201 301 401 501 601 701 ==>7개
올림(100//7) = 15
100%7 = 2
7개*24 = 158개의 룸
98개(14번째)
115 215
==> 215 배정
4.30 50 72 ==>30층 50호실 72번째 손님
72%30 = 12
72//30 + 1 = 2+1 =3
101~~~~~3001 (30개)
102 ~~ 3002(30개)
103~1003(10개) 1103 1203
==> 1203호
5.20 40 100 ==>20층 40호실 100번째 손님
100%20 = 0 ==> 0일경우 층수 그대로 출력
100//20 = 5
101~2001(20개)
.
.
.
.104~2004(20개 * 4)
105~1905 2005
==================
코딩
==================
17번째줄 : TestCase 횟수 입력
18번째줄: i값이 T보다 작을경우 반복문 계속 실행
19번째줄: H,W,N 값 받기
21번째줄 : a = N%H ==>N번째도착 손님 % H층의 나머지(층수)
22번째줄 : b = 올림(N/H) ==> N번째 도착 손님 / H층의 몫의 올림값 (호수)
23~24번째줄: 층수의 값이 0일경우 층수 그대로 출력
★★★KEY POINT★★★
1. N번째도착 손님 % H층의 나머지(층수) 에 대한 이해
2. N번째 도착 손님 / H층의 몫의 올림값 (호수)
'Python(백준) > 기본 수학 1' 카테고리의 다른 글
[백준 파이썬 2839번]설탕배달★if문 활용 ★VER2.0 (1) | 2022.09.16 |
---|---|
[백준 파이썬 2869번]달팽이는 올라가고 싶다 ★올림함수를 활용하고 알고리즘 차근차근 분석하기★등차수열과 범위확인★VER2.0 (0) | 2022.09.16 |
[백준 파이썬 1193번]분수찾기 ★계수함수 & 대각선의 길이에 따른 분수의 규칙 이해하기★함수활용★VER2.0 (0) | 2022.09.16 |
[백준 파이썬 1712번]손익분기점★손익분기 잘 이해하기★손익못넘기는거 먼저 파악★VER2.0 (0) | 2022.09.15 |
[백준 파이썬 2292번]벌집 ★rfind() , find()함수 활용하기★ (0) | 2021.08.04 |