[백준(JAVA)] 11866번: 요세푸스 문제 0

세하·2025년 4월 28일

[백준] 문제풀이

목록 보기
49/94
post-thumbnail

문제

✔ 난이도 - Silver 4

설명

백준 알고리즘은 큐로 분류되어있지만 덱으로 풀었다
https://velog.io/@seha01130/JAVA-덱Deque-정리
큐에 대해 정리한건 https://velog.io/@seha01130/JAVA-큐Queue-메소드-정리 여기를 참조

설명은 https://velog.io/@seha01130/백준JAVA-1158번-요세푸스-문제 참고

풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        Deque<Integer> deque = new ArrayDeque<>();

        // String str = br.readLine();
        // int N = Integer.parseInt(str.charAt(0) + "");

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        for (int i = 0; i < N; i++){
            deque.addLast(i + 1);
        }
        // System.out.println(deque);

        sb.append("<");
        int count = 1;
        while (!deque.isEmpty()){
            if (count < K){
                deque.addLast(deque.removeFirst());
                count++;
            } else {
                sb.append(deque.removeFirst());
                count = 1;

                if (!deque.isEmpty()){
                    sb.append(", ");
                }
            }
        }
        sb.append(">");

        System.out.println(sb);
    }
}

TIL💡

📌 String형에서 문자 가져오기

StringBuilder sb = new StringBuilder();

String str = br.readLine();
int N = Integer.parseInt(str[0]);

여기서 왜 str[0] 으로 문자 하나를 가져올 수 없을까?
String은 문자들의 묶음이지만, 엄밀히 말하면 배열이 아니고 객체이기 때문에 배열처럼 접근할 수는 없다.
따라서 문자 하나를 가져오고싶다면 charAt(int index) 메서드를 사용해야한다.

StringBuilder sb = new StringBuilder();

String str = br.readLine(); //7 3 입력함.
int N = Integer.parseInt(str.charAt(0) + ""); // 7
int K = Integer.parseInt(str.charAt(2) + ""); // 3

System.out.println(N + K); // 10
System.out.println(N + " " + K); // 7 3

또는

StringBuilder sb = new StringBuilder();

String str = br.readLine();
char ch = str.charAt(0);
int N = ch - '0';  // 문자를 숫자로 변환

여기서 str.charAt(0) + "" 이걸 해주는 이유는 str.charAt(0)의 타입은 char형이다. 그런데 Integer.parseInt() 메서드는 String형 타입을 받아서 int형으로 변환해주는 메서드이기때문에 꼭 String형이 들어와야한다!
그래서 str.charAt(0) + "" 이렇게 "문자 + 빈 문자열"을 하면, char가 자동으로 String으로 변환이 됨!

만약 char가 딱 '숫자' 문자라면, 굳이 + "" 안 하고 이렇게 바로 변환하는 방법도 있다.

int N = str.charAt(0) - '0';

'5' - '0' = 5
'8' - '0' = 8
코테 같은 데서 시간 아낄 때 이 방법을 애용하면 좋을듯!

0개의 댓글