[백준] 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);
}
}
}