🌞Algorithm/🔥Baekjoon

[Baekjoon] 3518_공백왕 빈-칸

뿌야._. 2025. 7. 9. 12:12
문제(출처: https://www.acmicpc.net/problem/3518)

< 공백왕 빈-칸 >

 

문제 풀이 

 

각 단어를 입력받으면서 문자열의 최대 길이를 저장한 후 최대 길이에 맞춰서 단어와 공백을 출력한다.

* 마지막 단어 뒤에는 공백을 출력하지 않는다.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
import java.io.OutputStreamWriter;

public class _3518_ { // 공백왕 빈-칸

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		String str = "";

		ArrayList<ArrayList<String>> list = new ArrayList<>();
		ArrayList<Integer> len = new ArrayList<>();

		while ((str = bf.readLine()) != null) {
			st = new StringTokenizer(str);

			ArrayList<String> word = new ArrayList<>();
			int idx = 0;

			while (st.hasMoreTokens()) {
				word.add(st.nextToken());
				if (len.size() <= idx) {
					len.add(word.get(idx).length());
				} else {
					len.set(idx, Math.max(len.get(idx), word.get(idx).length()));
				}
				idx++;
			}
			list.add(word);
		}

		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < list.get(i).size(); j++) {
				bw.write(list.get(i).get(j));

				if (j == list.get(i).size() - 1) {
					break;
				}
				for (int k = 0; k < (len.get(j) - list.get(i).get(j).length()) + 1; k++) {
					bw.write(" ");
				}
			}
			bw.write("\n");
		}
		bw.flush();
	}
}
변수)
str : 문서 내용
list : 문서 내용을 토큰화해서 저장한 ArrayList
len : 같은 위치에 있는 단어의 최대 길이
word : 문서 한 줄 정보
idx : 단어 위치

 

문서 내용이 없을 때까지 입력받아 다음 과정을 반복한다.

 

1) 한 줄씩 입력받아 ArrayList에 각 단어를 저장 

2) 각 단어의 길이를 저장 (같은 위치에 있는 단어의 길이와 비교하여 최댓값으로 저장)

3) 한 줄 정보를 ArryaList에 저장

 

ArrayList를 전체 탐색하면서 단어를 출력한다. 이때, (각 위치 최댓값) - (단어 길이) 값만큼 공백을 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 27060_Vertical Histogram  (2) 2025.07.11
[Baekjoon] 32076_Easy as ABC  (2) 2025.07.10
[Baekjoon] 16300_H to O  (2) 2025.07.08
[Baekjoon] 26043_식당 메뉴  (3) 2025.07.07
[Baekjoon] 15323_ZigZag  (1) 2025.06.27