0x04 강_연결 리스트 문제 - 요세푸스 문제

JUN·2024년 5월 26일
0

codingTest

목록 보기
7/23

📚 오늘의 문제.

📝 문제 1. 요세푸스 문제

링크 : https://www.acmicpc.net/problem/1158

  1. 문제 설명

    N명의 사람이 원을 이루면서 앉아있고 양의 정수 K가 주어졌을 때 순서대로 K번째 사람을 제거하면서 순열에 넣었을 때 해당 순열을 구하는 문제.

  2. 문제 풀이

    간단히 연결리스트를 만들고 k번째 요소를 제거하면서 Stringbuilder 에 추가해줬다.

    처음에는 iterator를 사용하려고 했으나 파이썬 리스트와는 다르게 해당 클래스는 지정된 리스트의 요소 이후의 색인은 따로 지원하지 않는다.

    // 요세푸스_문제 1158
    // 풀이
    // 간단히 연결 리스트를 만들고 k 번째 요소를 제거하면서 sb에 추가.
    // 단. Java는 파이썬과는 다르게 index를 따로 지정해줘야함.
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.LinkedList;
    
    public class Main {
    
      public static void main(String[] args) throws IOException {
        //Input
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int k = Integer.parseInt(input[1]);
    
        StringBuilder sb = new StringBuilder();
        sb.append('<');
    
        // LinkedList와 ListIterator 사용.
        LinkedList<Integer> lnkList = new LinkedList<>();
    
        // LinkedList 초기화
        for (int i = 1; i <= n; i++) {
          lnkList.add(i);
        }
    
        int index = 0;
        while (lnkList.size() > 1) {
          index = (index + k - 1) % lnkList.size(); // index 따로 체킹
          sb.append(lnkList.remove(index)).append(", ");
        }
        sb.append(lnkList.remove()).append('>');
    
        System.out.println(sb.toString());
        br.close();
      }
    }

🔑  키워드.

  • 띄어쓰기로 지정된 수의 초기화 input : 3 7
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int k = Integer.parseInt(input[1]);
  • StringBuilder 사용 시 append() 중복 가능
    sb.append(lnkList.remove()).append('>');
profile
순간은 기록하고 반복은 단순화하자 🚀

0개의 댓글