www.acmicpc.net/problem/10250

 

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를 대신할 블로그 플랫폼을 찾는 글이 될 것 같다..

 

 


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/