[백준] 24337: 가희와 탑 - JAVA

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

풀이

a와 b중 큰 값을 먼저 놓고 왼쪽, 오른쪽에 다른 건물들을 배치하면 된다.

a = 3, b = 5 라고 주어졌다면 5를 먼저 가운데에 세우고 왼쪽에 1 2, 오른쪽에 4 3 2 1을 배치한다.

즉, 1 2 5 4 3 2 1 과 같이 된다.

그 후 건물의 개수 N을 맞춰줘야 하는데 모자란 개수를 첫번째 건물을 세운 뒤에 1로 채워넣는다.

2번위치에 채우는이유는 첫 건물이 2 이상일 경우 앞에 1을 놓으면 a가 달라지기 때문이다.


메모리: 28116KB

시간: 272ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        Deque<Integer> dq = new ArrayDeque<>();
        dq.add(Math.max(a, b));
        for (int i = a - 1; i >= 1; i--) {
            dq.addFirst(i);
        }
        for (int i = b - 1; i >= 1; i--) {
            dq.addLast(i);
        }

        if (dq.size() > N) {
            System.out.println(-1);
        } else {
            int cnt = N - dq.size();

            StringBuilder sb = new StringBuilder();
            sb.append(dq.pollFirst()).append(" ");
            for (int i = 0; i < cnt; i++) {
                sb.append(1).append(" ");
            }
            while (!dq.isEmpty()) {
                sb.append(dq.pollFirst()).append(" ");
            }

            System.out.println(sb);
        }

    }

}