https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

알고리즘 분류

  • 난이도 : 실버4
  • 구현 언어 : 자바
  • 소요시간 : 30분
  • 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;

public class Josephus {

	public static void main(String[] args) throws IOException {
		//첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) ex)7 3
		
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		
		String inputVal = bf.readLine();
		
		int cnt = Integer.parseInt(inputVal.split(" ")[0]);
		int target = Integer.parseInt(inputVal.split(" ")[1]);
		
		ArrayDeque<Integer> arr = new ArrayDeque<Integer>();
		for (int i = 1; i <= cnt; i++) {
			arr.addLast(i);
		}

		String output = "<";
		while(!arr.isEmpty()) {
			for (int i = 0; i < target-1; i++) {
				int temp = arr.pop();
				arr.addLast(temp);
			}
			output += arr.pop() + ", ";
		}
		int len = output.length();
		output = output.substring(0, len-2); // 맨 마지막 ", " 삭제
		output += ">";
		System.out.print(output);
	}
}

 

문법

String.substring(0, len-2) : 0번 인덱스 ~ String의 뒤에서 3번째 인덱스까지

 

1. substr(a,b) : a는 시작위치, b는 길이

a번째 부터 b길이 만큼만 잘라내어 표시

 

2. substring(a,b) : a는 시작위치, b는 종료위치

a번째부터 b번째 전까지 잘라내어 포시

 

 

==========================================================================

  • StringTokenizer 사용
  • StringBuilder 사용
  • 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;

public class Josephus_11866 {

	public static void main(String[] args) throws IOException {
	
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer inputVal = new StringTokenizer(br.readLine());
		
		int cnt = Integer.parseInt(inputVal.nextToken());
		int target = Integer.parseInt(inputVal.nextToken());
		
		ArrayDeque<Integer> arr = new ArrayDeque<Integer>();
		for (int i = 1; i <= cnt; i++) {
			arr.addLast(i);
		}
		
		StringBuilder sb = new StringBuilder("<");
		while(!arr.isEmpty()) {
			for (int i = 0; i < target-1; i++) {
				int temp = arr.pop();
				arr.addLast(temp);
			}
			sb.append(arr.pop() + ", ");
		}
		int len = sb.length();
		sb = sb.delete(len-2, len); //마지막 ", " 삭제
		sb.append(">");
		System.out.print(sb);
		
		br.close();
	}
}

 

 

+ Recent posts