티스토리 뷰
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