Java

[백준 24337] 가희와 탑 (JAVA)

iheeeee6-6 2023. 4. 27. 10:46
728x90

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

 

24337번: 가희와 탑

일직선으로 다양한 높이의 건물들이 N개 존재합니다. 가희는 건물들의 왼쪽에, 단비는 건물들의 오른쪽에 있습니다. 일직선 상에 가희와 단비, 건물들은 아래와 같은 순서로 배치되어 있습니다.

www.acmicpc.net

 

구현 문제로, 풀이법을 생각해내기 꽤 어려운 문제였다...

 

1. 건물의 최고 높이는 a와 b중 큰 값이다.

2. 디큐를 생성하여 a-1만큼의 오름 차순 + 최고 높이 건물 + b-1만큼의 내림차순으로 먼저 add 한다!

3. 다 add 한 후에 디큐 사이즈가 n보다 크다면, 건물 정보가 나올 수 없는 것이기에 -1을 출력한다!!

4. 여기까지 진행하면 아래와 같은 경우가 발생된다.

입력

9 1 5 -> 5 4 3 2 1

3 1 2 -> 2 1             

이러면 건물의 개수가 맞지 않기 떄문에, 가장 낮은 건물의 높이인 1을 앞쪽에 추가하여 개수를 맞춘다!

주의 할 점은 앞에서 보이는 건물의 수가 달라지지 않도록 해야하기에,

기존 디큐의 가장 앞에 있는 값을 poll하여 따로 저장해 논 후,  나중에 다시 addFirst()한다!!

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		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());

		int maxHeight=Math.max(a, b); //건물 최고 높이
		Deque<Integer> q = new LinkedList<>();
		StringBuilder sb = new StringBuilder();
		for (int i = 1; i < a; i++) {
			q.add(i);
		}
		q.add(maxHeight);
		for (int i = b - 1; i > 0; i--) {
			q.add(i);
		}

		if(q.size()>n) {
			System.out.println(-1);
			return;
		}
		
		//건물 갯수 맞추기
		int first = q.pollFirst();
		int qSize = q.size();
		for(int i=1;i<=n-qSize-1;i++) {
			q.addFirst(1);
		}
		q.addFirst(first);
		for (int i = 1; i <= n; i++) {
			System.out.print(q.pollFirst() + " ");
		}

	}

}

'Java' 카테고리의 다른 글

[백준 1522] 문자열 교환 (JAVA)  (0) 2023.04.28
[백준 1976] 여행가자 (JAVA)  (0) 2023.04.27
[백준 1138] 한 줄로 서기 (JAVA)  (0) 2023.04.26
[백준 13549] 숨바꼭질 3 (JAVA)  (0) 2023.04.25
[백준 20437] 문자열 게임2 (JAVA)  (0) 2023.04.25