알고리즘/백준 알고리즘

[java] 백준 알고리즘 1158번 조세퍼스 문제 풀이

희랍인 조르바 2018. 7. 27. 14:26



풀이 방법은 백준 알고리즘 11866번 문제와 같다.


풀이 방법 보러가기 : Click


내 풀이 방법은 input 값이 올라갈수록 시간이 오래 걸리는 알고리즘이다.(그다지 좋은 알고리즘을 만들어내지 못했다.)


여기 올린 풀이소스는 나 혼자 힘으로 풀어냈던 코드를 올린 것이고, 


더 효율적인 알고리즘은 나머지 연산자(%)를 활용해 푼 알고리즘이 메모리면에서나 시간면에서나 더 좋다.



* 풀이 소스


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
 
public class Baekjoon1158 {
 
    static StringTokenizer st;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        st = new StringTokenizer(br.readLine());
        
        int totalPeople = Integer.parseInt(st.nextToken());
        int removeOrder = Integer.parseInt(st.nextToken());
        Queue<Integer> josephus = new LinkedList<>();
        
        for(int i=1; i<=totalPeople; i++) {
            josephus.add(i);
        }
        
        int calCount = 0;
        int outputOrder = 0;
        sb.append("<");
        while(outputOrder != totalPeople) {
            int pollNum = josephus.poll();
            calCount++;
            
            if(calCount == removeOrder) {
                sb.append(pollNum+", ");
                outputOrder++;
                calCount = 0;
            }else {
                josephus.add(pollNum);
            }
            
        }
        sb.delete(sb.length()-2, sb.length());
        sb.append(">");
        bw.write(sb.toString());
        bw.flush();
        
    }
 
}
 
cs