728x90
이 문제는 규칙을 잘 찾는 것이 중요한 문제이다.
초기의 v 값에 따라 반복되는 숫자가 달라진다.
예를 들어 초기값이 1이고 m이 1 인경우
이렇게 time=4번 만에 같은 값을 가지게 되고
초기값 13이고 m=3 인경우에
time=5번 만에 같은 값을 가지게 된다.
그러므로 time가 4와 5에 따라 계산을 다르게 해줘야 한다.
그래서 확인 해주기 위해서 ArrayList를 북 동 남 서 이렇게 4개를 만들어서 값을 넣어주면서 같을 때까지 진행하였다.
여기서 value는 몇 번 반복되는가를 나타내는 것으로 fv에 time값을 넣어주고 만약에 time이 5였다면 맨 초기의 속력 값을 따로 해줘야 하기 때문에 돌려야 하는 t값을 -1 해준 값으로 value를 구해준다.
반복되는 횟수만큼 이동을 진행한다.
값이 4가 아니기 때문에 처음 속력만큼 우선 북쪽으로 진행해주고 나머지 이동을 실시한다.
전체 코드
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static long fv, v, m, t, sum[], sx, sy, dir[][] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };
static Queue<Long> num[];
static int ndir;
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
v = Integer.parseInt(st.nextToken());
long f=v;
m = Integer.parseInt(st.nextToken());
t = Integer.parseInt(st.nextToken());
num = new LinkedList[4];
for (int i = 0; i < 4; i++) {
num[i] = new LinkedList<Long>();
}
sum = new long[4];
long time = 0;
while (num[ndir].isEmpty() || num[ndir].peek() != v) {
num[ndir].add(v);
sum[ndir] = v;
v = (v * m) % 10;
ndir = (ndir + 1) % 4;
time++;
}
long value = 0;
fv=time;
if (fv % 4 != 0) {
time--;
value = (t - 1) / time;
} else {
value = t / time;
}
for (int i = 0; i < 4; i++) {
sx += (value * sum[i] * dir[i][0]);
sy += (value * sum[i] * dir[i][1]);
}
ndir = 0;
if (fv % 4 != 0) {
t = (t-1) % time;
sx+= (f*dir[ndir][0]);
sy+=(f*dir[ndir][1]);
ndir = (ndir + 1) % 4;
} else {
t = t % time;
}
for (int i = 0; i < t; i++) {
long next = num[ndir].remove();
sx += (next * dir[ndir][0]);
sy += (next * dir[ndir][1]);
ndir = (ndir + 1) % 4;
}
System.out.println(sx + " " + sy);
}
}
'알고리즘' 카테고리의 다른 글
백준 19640 <화장실의 규칙> (0) | 2020.10.05 |
---|---|
백준 20005 <보스몬스터 전리품> (0) | 2020.10.04 |
백준 1744 <수묶기> (0) | 2020.10.02 |
백준 19952 <인성 문제있어??> (0) | 2020.09.30 |
백준 2589 <보물섬> (0) | 2020.09.29 |