본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 10250번: ACM 호텔 -Python

728x90

[백준알고리즘] 10250번: ACM 호텔 -Python

C++언어 정리하기 - cout과 cin : 네이버 블로그 (naver.com)

 

C++언어 정리하기 - cout과 cin

이번 내용을 시작하기 전에안녕하세요 루벤딕스입니다. 저번 포스팅에서는 main() 진입 전의 초기화를 알아...

blog.naver.com

 

사실상 \(w\)는 그다지 필요하지 않다.

\(h\)로 나눈 나머지로 층을 구하고,\(h\)로 나눈 몫으로 호실을 구하면 된다.

 

다만 출력할 때, 호수가 한자리일 경우에는 01, 02와 같이 앞에 0을 패딩 해주어야 한다. 따라서 아래처럼 패딩을 해주었다.

\({ 인덱스:[패딩값][크기]d }\) 로 10진수 상태로 항상 \([크기]\)의 길이가 되도록 패딩을 해주었다.

 

for _ in range(int(input())):
    h, w, n = map(int, input().split())

    d = n // h + 1
    floor = n % h
    if floor == 0: 
        d -= 1
        floor = h

    print('{0}{1:02d}'.format(floor, d))

 

다음은 C++ 코드이다.

 

층수가 아닌 호수를 가리킬 때에는 항상 두 자리 출력을 해야 해서 이 부분을 찾아보았다.

 

출력 길이를 맞춰주는 함수는 precisionwidth가 있었고 각각을 자유롭게 사용할 수 있는 주변 기능들이 있었다.

precision의 경우에는 한 번 설정 값을 해제하지 않는 이상 유지가 되는 성질이 있어 호수 표시를 위해 2칸 설정을 한다면 층수 표시에서는 항상 설정을 해제하는 과정이 필요하다.

반면, width의 경우에는 한 번 설정한 값이 그다음 출력에만 영향을 주기 때문에, 나는 width를 사용해서 문제를 풀었다.

 

width로 출력 크기를 맞추면서, 동시에 패딩 값을 설정해줘야 했다. 나는 coutfill을 사용했는데, fill의 경우에는 width와 달리 한 번 설정한 값이 계속 유지가 된다.

따라서 fill은 main 함수에서 한 번만 호출해서 패딩 값을 설정했다.

#include <iostream>

void solve(void);

int main(void)
{
    int test_case;
    std::cin >> test_case;
    std::cout.fill('0');

    for (int t = 0; t < test_case; t++)
        solve();
    return 0;
}

void solve(void)
{
    int h, w, n;
    std::cin >> h >> w >> n;

    int q, r;
    q = int(n / h) + 1;
    r = n % h;

    if (r == 0)
    {
        q--;
        r = h;
    }

    std::cout << r;
    std::cout.width(2);
    std::cout << q << std::endl;
    return;
}

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90