관리 메뉴

공부한것들을 정리하는 블로그 입니다.

실1 6064 카잉달력 - 브루트포스 건너뛰며해보기 본문

알고리즘/백준 - 문제풀이

실1 6064 카잉달력 - 브루트포스 건너뛰며해보기

호 두 2022. 5. 16. 22:24
반응형

https://www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

 

 

//카잉달력
public static void bf_6064(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

    int t = Integer.valueOf(bf.readLine());
    while (t-- > 0) {
        String[] line = bf.readLine().split(" ");
        int m = Integer.valueOf(line[0]);
        int n = Integer.valueOf(line[1]);
        int x = Integer.valueOf(line[2]) -1;
        int y = Integer.valueOf(line[3]) -1;
        boolean ok = false;

        // 1. n*m => 전체 시행횟수
        // 그런데 값이 +1 되는게 아니라 m만큼 "건너 뛰며 해보기" 방식이므로 시간복잡도는 O(mn) 이 아니라 O(n)이 된다.
        // O(mn)의 경우 4만*4만=16억=1.6초 이므로 시간제한에 걸린다.

        // 2. int k = x => k의 초기값은 x
        // 계산의 편의를 위해 x와 y는 -1씩 해주었으며, 마지막에 결과값에서 +1 해준다.

        // 3. k+=m => m의 배수
        for (int k = x; k < n*m; k+=m) {
            if (k%n == y) {
                System.out.println(k+1);
                ok = true;
                break;
            }
        }
        if (!ok) {
            System.out.println(-1);
        }
    }
}

 

반응형
Comments