본문 바로가기
Java/백준

[java 백준] 브론즈 2/ 1592번 영식이와 친구들

by Meaning_ 2021. 7. 19.
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
반응형

댓글