노베이스 알고리즘 공부 #12. 백준 10250 ACM 호텔 - Python

Anny·2024년 4월 7일
0

https://www.acmicpc.net/problem/10250

1. 문제

-- T = 테스트 데이터의 갯수
-- H = 각 호텔의 층 수, W = 각 층의 방 수, N = 몇 번째 손님
-- 방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호
-- 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다.
-- 301호를 108호 보다 선호한다.

2. 풀이

2-1. 접근

-- 101, 201, 301, 401 순으로 방이 나간다에서 착안
1. N,M를 놓고, N을 1, M을 01로 셋팅
2. N은 1부터 W까지 먼저 돌려서 먼저 수열을 만듦,
3. M을 ++M한 후 N을 W까지 또 돌리고 조합, M을 또 ++M한 후 N을 H까지 조합하는 것을 M이 H가 될 때 까지 리스트에 입력
4. 그렇게 값을 받으며 생성 된 리스트에서 N번째 위치 값을 추출한다.

2-2. 1트

H = 각 호텔의 층 수, W = 각 층의 방 수, N = 몇 번째 손님
T = int(input())
H, W, N = map(int, input().split())

for _ in range(T):
    rooms = []
    for n in range(1, W + 1): #1부터 W까지 뒷번호 생성
        for m in range(1, H + 1): #1부터 H까지 앞번호 생성
            room_number = m * 100 + n
            rooms.append(room_number) #List에 생성된 번호 101, 201, 301,,, 저장

    print(rooms[N - 1])

그런데 오류가 남 왜냐?
H, W, N = map(int, input().split())를 앞에 빼뒀기 때문,, 이런 경우 테스트 케이스 갯수 만큼 값을 입력받는게 아니라 첫번째 케이스만 값을 입력 받기 때문에 for 문 안으로 넣어줘야 한다

2-3. 정답

T = int(input())

for _ in range(T):
    H, W, N = map(int, input().split())
    rooms = []
    
    for n in range(1, W + 1):
        for m in range(1, H + 1):
            room_number = m * 100 + n
            rooms.append(room_number)
            
    print(rooms[N - 1])
profile
Newbie

0개의 댓글