티스토리 뷰

알고리즘/백준

[백준] 6064번 카잉달력

머어하지 2018. 8. 18. 20:39

1) 생각

문제는 아주 심플하다 

1) 첫번째 생각

M,N 값에 대응하는 값을 1부터 쭉 올리면서 M,N에 도달하면 없는것으로 판단하여 -1을 출력하였다.

위의 시도는 바로 '시간초과'를 받았고 다른 생각을 해보아야했다.


2) 두번째 생각

M값을 고정시키고 N을 +M만큼 해준 후 차이를 N 범위를 넘어서게되면 -N을 해주어 처리를 하였다.

처음 M 값을 고정했을 때의 N에 대응하는 값을 가지고 새롭게 변한 tN 값과 비교를 해주면서 tN값이 다시 처음의 N 값으로 돌아왔다면 한 바퀴를 돌았다는 것이므로 대응하는 숫자가 없다고 판단하고 '-1'을 출력하였다.

=> 이경우 -N으로 처리하였는데 '틀렸습니다'가 아닌 '시간초과'를 받았기에 잘못된 부분을 발견하는데 조금 걸렸다.

M이 클경우 tN값에 +M을 해주어 N이 넘어가도 -N을 해준다고 N보다 작아지는것이 아니기 때문이다.

따라서 다른 방안을 생각하였다.


2) 방안

N을 넘어섰을 경우 로테이션으로 값이 돌아야한다. -N으로는 M이 클경우 처리가 안되므로 나머지 연산(%)를 통해서 해결하였다.

나머지 연산시 나누어 떨어지는 경우를 잘 처리 해주어야 한다.

처음에 x값에 대한 y값을 정할 때도 0이 나올 수 있으므로 조건 처리를 해주었고 그이외에 도는 위의 생각과 동일하게 처리하였다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.Scanner;
 
public class Main{
    static int M,N,x,y;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int tc = sc.nextInt();
        for(int i=0;i<tc;i++) {
            M = sc.nextInt();
            N = sc.nextInt();
            x = sc.nextInt();
            y = sc.nextInt();
            int tN = 1;
            // x의 값에 대응하는 첫 y 값 찾기
            if(N>=x) tN = x;
            else tN = x%N;
            if(tN==0) tN=N;
            int first = tN;
            // 첫 x는 x만큼 이동한 것이고, 그 이후는 한 바퀴를 돌아 x에 도달이므로 +M씩 커진다.
            for(int j=x;;j+=M) {
                if(tN==y) {
                    System.out.println(j);
                    break;
                }
                tN += M;
                tN = tN%N;
                if(tN==0) tN=N;
                // 한 바퀴 돌았나 체크
                if(first==tN) {
                    System.out.println(-1);
                    break;
                }
            }
        }
    }
}
cs


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2529번 부등호  (0) 2018.08.19
[백준] 1748번 수 이어 쓰기 1  (0) 2018.08.18
[백준] 14500번 테트로미노  (0) 2018.08.17
[백준] 1107번 리모콘  (0) 2018.08.17
[백준] 1261번 탈출  (0) 2018.08.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday