[백준/JAVA] 9437번 사라진 페이지 찾기

정은아·2025년 3월 2일

[알고리즘] 수학 모음

목록 보기
149/152
post-thumbnail

문제

백준 9437번 사라진 페이지 찾기 JAVA

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

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

        // N: 전체 페이지 수 P: 선택된 페이지
        // 입력의 끝은 0이 주어진다

        // 1. while을 입력 받은 뒤, 0이 나오면 종료한다.
        // 2. List를 생성해서 1부터 2개씩 증가하면서 넣고
        //    마지막 수에서 2씩 빼면서 넣어준다.
        // 3. P가 그 수에 해당하면 break하고 출력한다.
        // 4. 없으면 지나간다.

        while(true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int totalPage = Integer.parseInt(st.nextToken());

            if (totalPage == 0) {
                break;
            }

            int choicePage = Integer.parseInt(st.nextToken());

            // 4페이지씩 묶어서 배열로 저장하기 위한 구조
            ArrayList<ArrayList<Integer>> pages = new ArrayList<>();

            int front = 1;
            int back = totalPage;

            // pages에 저장하기 위해 PageSet에 먼저 담고 보낸다.
            for (int i = 0; i < (totalPage / 4); i++) {
                ArrayList<Integer> pageSet = new ArrayList<>();

                pageSet.add(front++);
                pageSet.add(back--);

                pageSet.add(front++);;
                pageSet.add(back--);

                pages.add(pageSet);
            }

            for (ArrayList<Integer> page : pages) {
                if (page.contains(choicePage)){
                    Collections.sort(page);
                    page.remove(Integer.valueOf(choicePage));
                    for (Integer i : page) {
                        sb.append(i).append(" ");
                    }
                    sb.append("\n");
                    break;
                }
            }
        }

        System.out.println(sb.toString());
    }
}

느낀점

ArrayList 안에 ArrayList를 넣는 구조는 처음 써봤다.
1. 최대 4000페이지까지 존재하기 때문에 앞, 뒤로 2page씩 pageSet이라는 List에 넣는다.
2. 그 후, pages라는 List로 전송한다.
3. forEach문을 사용해 pages에서 예제에서 알려주는 쪽수가 있는지 찾는다.
4. 찾았다면 오름차순으로 정렬한 뒤, 예제에 입력된 페이지는 제거한다.
5. 출력한다.

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글