본문 바로가기

알고리즘/다시 봐야할 것들

백준 - ACM 호텔(Java) 주기

본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.

https://github.com/ROUTINE-STUDY/Algorithm

 

저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.

 

GitHub - ROUTINE-STUDY/Algorithm: 초보 알고리즘 스터디 / 누구나 참여 가능

초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.

github.com

문의는 댓글 바람.

 

문제 출처 :https://www.acmicpc.net/problem/10250

 

[문제 설명]

문에 가까운 순서로 배정할 때, N번째 회원이 들어갈 방 번호는?

 

[접근 방법]

주기가 높이와 가로길이인 문제 단, 딱 떨어지는 경우를 체크해줘야한다.

시간복잡도는 테스트 케이스 개수인 O(T).

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cntOfTestcases = Integer.parseInt(br.readLine());
        StringTokenizer st;
        for (int idxOfTestcase = 0; idxOfTestcase < cntOfTestcases; idxOfTestcase++) {
            st = new StringTokenizer(br.readLine(), " ");
            int H = Integer.parseInt(st.nextToken());
            int W = Integer.parseInt(st.nextToken());
            int N = Integer.parseInt(st.nextToken());

            int floor = N%H;
            int noOfRoom = N/H+1;
            if (floor == 0) {
                floor = H;
                noOfRoom--;
            }

            floor *= 100;
            System.out.println(floor+noOfRoom);
        }
    }
}

 

[내 답안 수정하기]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int cntOfTestcases = Integer.parseInt(br.readLine());
        StringTokenizer st;
        for (int idxOfTestcase = 0; idxOfTestcase < cntOfTestcases; idxOfTestcase++) {
            st = new StringTokenizer(br.readLine(), " ");
            int H = Integer.parseInt(st.nextToken());
            int W = Integer.parseInt(st.nextToken());
            int N = Integer.parseInt(st.nextToken())-1;

            int floor = N%H;
            int noOfRoom = N/H;
            floor *= 100;
            System.out.println(floor+noOfRoom+101);
        }
    }
}

나눌 인원수를 -1을 해줘서 나머지 처리를 편하게 하는 법.

예전에 이런 식으로 풀었던 거 같은데 이번엔 기억이 잘 안났다. 이거 잘 안까먹게 몇 번 더 봐야겠다.

728x90
반응형