ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)6064 - 카잉 달력
    PS/boj 2020. 9. 22. 16:33
    import java.io.*;
    import java.util.StringTokenizer;
    
    public class boj_6064 {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer st;
    
        public static void main(String[] args) throws IOException {
            int t = Integer.parseInt(br.readLine());
    
            for (int i = 0; i < t; i++) {
                st = new StringTokenizer(br.readLine());
                int m = Integer.parseInt(st.nextToken());
                int n = Integer.parseInt(st.nextToken());
                int x = Integer.parseInt(st.nextToken()) - 1;
                int y = Integer.parseInt(st.nextToken()) - 1;
    
                boolean isOk = false;
                for (int j = x; j < m*n; j+=m) {
                    if (j % n == y) {
                        System.out.println(j+1);
                        isOk = true;
                        break;
                    }
                }
    
                if (!isOk) System.out.println(-1);
            }
    
        }
    }
    

     

    생각

    - 날짜 계산의 문제와 유사하게 1부터 쭉 반복문을 돌려가며 찾을려고 생각했음

    - 근데 m,n의 범위가 각각 4만이라서 O(N^2)의 풀이의 경우 시간초과

    - 풀이가 생각이 안나면 손으로 하나씩 적어보자

     

    풀이

    - 숫자를 적어나가다 보면 나머지 규칙이 있음

    - x, y 값 중 하나를 고정 시키고 그 값의 범위만큼 널뛰기 하면 나머지 하나의 값만 변하게 되고

      계속 반복하다 보면 언젠간 나오게 되어있음

    - 풀이에서는 초기값을 x에 고정시키고 여기서 x의 범위인 m만큼 널뛰기하면 x값은 고정이고

       j % n == y를 만족할때까지 반복하면 됨

    - 초기에 x, y를 -1씩 해줘야 나머지가 딱 맞게 떨어질 수 있음

    - 출력시에는 처음에 뺏으니 +1 해준다

    'PS > boj' 카테고리의 다른 글

    boj)10773 - 제로  (0) 2020.10.12
    boj)1748 - 수 이어쓰기 1  (0) 2020.09.22
    boj)14500 - 테트로미노  (0) 2020.09.22
    boj)1107 - 리모컨  (0) 2020.09.22
    boj)1476 - 날짜 계산  (0) 2020.09.21
킹수빈닷컴