문제(출처: 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 |