조세푸스 문제 궁금합니다.

  • ktko0714
    ktko0714

    import java.util.ArrayList;
    import java.util.Scanner;

    //JOSEPHUS
    //https://algospot.com/judge/problem/read/JOSEPHUS
    public class JOSEPHUS {
    static ArrayList mArrayList;
    static int testCase;
    static int[][] result;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        Scanner scan = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성
        testCase = Integer.parseInt(scan.nextLine().trim()); // 키보드 문자 입력
        result = new int[testCase][2]; // 테스트 케이스 정답을 저장하는 배열
    
        for (int i = 0; i < testCase; i++) {
            int a = scan.nextInt(); // 사람 명
            int b = Integer.parseInt(scan.nextLine().trim()); // 순서
    
            mArrayList = new ArrayList<Integer>();
    
            for (int j = 1; j <= a; j++) {
                mArrayList.add(j);
            }
    
            int seque = 0;
            for (int k = 0; k < a - 2; k++) {
                if (mArrayList.size() <= seque)
                    seque %= mArrayList.size();
    
                mArrayList.remove(seque);
                seque += 2;
            }
    
            int c = mArrayList.get(0).intValue();
            int d = mArrayList.get(1).intValue();
    
            result[i][0] = mArrayList.get(0).intValue();
            result[i][1] = mArrayList.get(1).intValue();
        }
    
        for (int k = 0; k < testCase; k++)
            System.out.println(result[k][0] + " " + result[k][1]+ " ");
    
    }

    }

    저는 40명이 있음 for문으로 38번만 돌리게 하였고,
    int seque = 0;
    for (int k = 0; k < a - 2; k++) {
    if (mArrayList.size() <= seque)
    seque %= mArrayList.size();

    mArrayList.remove(seque);
                seque += 2;
            }

    위에 부분이 제거하는 로직을 수행하고 있습니다.
    ArrayList에서 맨처음 삭제될 변수 seque를 0으로 선언하고 +2 씩더하면서 제거하고 있고, 만약 ArrayList보다 사이즈가 클 경우 %로 나누게 됩니다.
    정답은 잘 나오는데 성공이라고 안나오네요 .. 원인을모르겠습니다 ㅠㅠ


    8년 전
1개의 댓글이 있습니다.
  • ison5059
    ison5059

    initValue() 쓸 때 오류 안나시나요??
    제가 돌려보니 ArrayList의 타입이 object로 잡혀있어서 intValue 쓸 때 오류 나던데...
    int c = ((Integer) mArrayList.get(0)).intValue();
    이런식으로 캐스팅 해줘야 오류가 안나던데;

    뭐 아무튼 오류의 원인은 결과 출력할 때 뒤에 공백이 하나 더 붙어서 출력되서 그런거 같아요~
    System.out.println(result[k][0] + " " + result[k][1]+ " ");
    이 부분을
    System.out.println(result[k][0] + " " + result[k][1]);
    이렇게 고쳐보세요~


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.