일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- 2981
- codility
- javascript
- Dijkstra
- 최단경로
- 프로그래머스
- algorithm
- API
- java
- 문자열
- Python
- 소수
- Greedy
- applicationeventpublisher
- springboot
- 백준
- 파이썬
- 알고리즘
- counting elements
- 라이브템플릿
- spring security
- beandefinitionstoreexception
- BFS
- error
- Spring
- brute force
- 탐욕법
- 2018 KAKAO BLIND RECRUITMENT
- HTTP
Archives
- Today
- Total
Altiora Petamus
ACM 호텔 본문
Reference
문제풀이
처음 문제로 보이는 그림을 보면 2차원 배열을 사용해서 푸는걸까라는 생각이 들기 쉽다. 물론 2차원 배열로도 풀 수 있지만, 훨씬 쉬운 방법을 통해 풀 수 있다.
- 문제를 잘 읽어보면 6층 호텔의 10번째 손님은 4층의 객실에 배정된다. 만약 14번째 손님이라면? 2층에 배정된다. 즉 N / H 의 나머지값이 배정받을 객실의 층 수가 된다.
- 비슷한 로직으로 객실의 번호는 몫 + 1이 된다.
그렇다면 나머지가 0일 경우엔 어떻게 해야할까? 6번째 손님의 경우 601호에 배정되야 하지만, 나머지가 0이므로 층수를 알 수가 없어진다. 12번째 손님도 마찬가지이다.
- 나머지가 0일 경우 호텔의 층 수가 배정받을 객실의 층 수가 된다.
- 객실 번호는 몫이 된다.
T = int(input())
for _ in range(T):
H, W, N = map(int, input().split(" "))
X = N % H
Y = N // H + 1
if X == 0:
X = H
Y = N // H
# Y -= 1 도 가능
print(f'{X * 100 + Y}')
이런 문제는 비교적 쉬운 문제에 속하는 것 같다. 함정에 빠지지 않도록만 주의하자.
TODO & FIXME
- 예외 체크 과정에서 불필요한 로직을 많이 사용했었다. 노션에 풀이과정을 적다가 뒤늦게 깨닫게 되어 수정했는데, 간결한 코드를 유지하기 위해서 신경을 쓸 필요가 있겠다.
- 자릿수 체크는 자릿수의 해당하는 숫자를 곱하면 된다는 것을 자주 깜박한다. 이걸 몰라도 풀 수 있는 문제였지만, 잊지 않기 위해 다시 기록해둔다.
'1day-1algorithm' 카테고리의 다른 글
셔틀버스 (0) | 2021.04.26 |
---|---|
신규 아이디 추천 (0) | 2021.04.23 |
달팽이는 올라가고 싶다 (0) | 2021.04.19 |
분수찾기 (0) | 2021.04.18 |
캠핑 (0) | 2021.03.01 |