알고리즘/백준 알고리즘
[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 |