728x90
반응형
https://www.acmicpc.net/problem/1592
1592번: 영식이와 친구들
일단 1번이 공을 잡는다. 1번은 공을 한 번 잡았기 때문에, 공을 3번에게 던진다. 3번은 공을 한 번 잡았기 때문에, 공을 5번에게 던진다. 5번은 2번에게 던지고, 2번은 4번에게 던진다. 4번은 1번에
www.acmicpc.net
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n, m, l;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
l = Integer.parseInt(st.nextToken());
int sum = 0; // 전체 횟수
int[] arr = new int[n + 1];
// 사용자 당 공 받은 횟수 저장
arr[1] = 1;
int userNum = 1;
while (true) {
if (arr[userNum] == m) {
break;
}
if (arr[userNum] % 2 == 1) {
userNum += l;
if (userNum > n) {
userNum -= n;
}
sum += 1;
arr[userNum]++;
} else if (arr[userNum] % 2 == 0) {
userNum -= l;
if (userNum < 1) {
userNum += n;
}
arr[userNum]++;
sum += 1;
}
}
System.out.println(sum);
}
}
|
cs |
처음에는 해시맵으로 풀었다가 배열로 바꿔서 풀었다. 이유는 널 포인터 오류가 계속 나서
로직 자체는 단순한데 내가 너무 꼬아서 생각해서(내가 바보라서...ㅋㅋ) 문제를 푸는데 시간을 너무 많이 낭비해 버렸다.
시계방향으로 갈 때 인덱스 번호 +=l , 반 시계 방항일 때 인덱스 번호 -= l 을 기준으로 정한다. (이걸 정하지 않은 ArrayIndexOutOfBounds 오류를 계속 보게 될 것이다..!)
시계 방향으로 가는 경우 어느 순간 인덱스 번호가 5를 초과하게 된다. 이럴 땐, 인덱스번호 -n 을 해주면 된다.
예를 들어, 인원이 5명이 있고 현재 인덱스 번호가 4일때,
시계방향으로 간다면 인덱스 번호가 6이된다. 하지만 여기서 전체 인원수인 5를 빼주면 인덱스 1로 향하게 된다!
반시계 방향인 경우 어느순간 인덱스 번호가 1 미만이 된다. 이땐 인덱스 번호 +n 을 해주면 된다.
728x90
반응형
'Java > 백준' 카테고리의 다른 글
[java 백준] 실버 5/ 16208번 귀찮음 (0) | 2021.07.20 |
---|---|
[java 백준] 실버 4/ 1676번 팩토리얼 0의 개수 (0) | 2021.07.19 |
[java 백준] 실버 5/ 1934번 최소 공배수 (0) | 2021.07.18 |
[java 백준] 브론즈 3/ 1267번 핸드폰 요금 (1) | 2021.07.18 |
[java 백준] 브론즈 1/ 1157번 단어공부 (0) | 2021.07.18 |
댓글