10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
심심한 김에, 포스팅 하나 더 올린다.
설명만 길 뿐, 아주 단순한 문제다.
101,201,301, ... 102,202,302, ... 순서대로 방에 들어가는 아주 단순한 규칙만 찾으면 된다.
H=6일 때 10번째 손님은 402호에 배정된다.
402호라는 숫자를 어떻게 얻어낼 수 있을지 생각해보자.
101~601
102~402
1번째 손님 = 101호
6번째 손님 = 601호
boundary의 규칙만 잘 파악하면 전체 규칙을 파악할 수 있다. 이 때의 boundary는 601호 -> 102호로 흘러가는 타이밍이다.
7번째 손님 = 102호
YY=01
XX=02
자세한 설명은 다소 생략하고,
N번째 손님에 대해
(XX-1) * H + YY = N라는 규칙이 있음을 알 수 있다
검증)
102호 : (2-1)*6+1 = 7번째 손님
402호 : (2-1)*6+4 = 10번째 손님
이걸 코드로 표현하면 끝인 것이다.
아, 위에서는 X,H,Y를 가지고 N을 구하는 식을 작성했다.
우리가 해야할 일은 N을 가지고 X,Y를 구하는 것이다.
삽질..
N=10,H=6으로 다시 생각해보면
N/H=1과 나머지 4
배정 호 수는 402호이므로
YY=(나머지)
XX=(N/H)+1
임을 알 수 있다
검증)
N=3,H=6
배정 호 수 = 301
YY=3
XX=(3/6)+1=1
YYXX=301
간단한 문제라고 급하게 풀다가 실수만 하지말자.
testcase = int(input())
for i in range(testcase):
s = input().split()
h,w,n = map(int, s)
yy = n%h
xx = n//h+1
if xx < 10:
yyxx = str(yy)+'0'+str(xx)
else:
yyxx = str(yy)+str(xx)
print(yyxx)
loop 방식이 비효율적이고 생각해서 n/h 방식으로 접근했다가, n/h == 0인 edge case가 문제가 되었다.
그래서 loop 방식으로 다시 접근해보았다.
testcase = int(input())
for i in range(testcase):
s = input().split()
h,w,n = map(int, s)
temp_n = n
xx = 1
while temp_n > h:
xx += 1
temp_n -= h
yy = temp_n
if xx < 10:
yyxx = str(yy)+'0'+str(xx)
else:
yyxx = str(yy)+str(xx)
print(yyxx)
티스토리.. 코드블럭 기능이 추가되었다 했더니 코드블럭 밑에서 한글이 안 나오는 버그가 있나보다. (바로 입력하면)
아무튼, 다소 효율적인 코드는 아니지만 문제를 해결할 수 있었다
www.acmicpc.net/source/26406155
로그인
www.acmicpc.net
다음 포스팅은 tistory를 대신할 블로그 플랫폼을 찾는 글이 될 것 같다..
'Algorithm' 카테고리의 다른 글
백준 알고리즘 14681번 : 사분면 고르기 (0) | 2021.02.15 |
---|---|
[Algorithm/Data Structure] Tree C/C++ example code (+ Mirror Tree) (0) | 2019.06.16 |
알고리즘 문제 해결 전략 - 사탕 나눠주기 문제 (1) | 2019.03.27 |
[BOJ] 백준 알고리즘 9095번 정답 코드 (0) | 2018.04.23 |
[Algorithm] 코드 읽기 (0) | 2018.04.01 |
WRITTEN BY
- hojongs
블로그 옮겼습니다 https://hojongs.github.io/