문제 : boj3518
문제는 참 직관적이고 간단한 구현문제인데, 생각보다 꾸현이 까다롭긴 하다. 나온 설명대로 문자열 파싱만 잘 하면 되서 딱히 알고리즘적으로 설명할 건 없다.
주의점은 좀 있다. 첫째로 다음과 같은 경우를 보자.
abc def
zzz ggg
이미 문제에서 제시된 방식되로 잘 배치되어 있지만, '사전순으로 가장 앞서는 것'을 출력해야 하므로 공백을 1칸으로 줄여야 한다.
abc def
zzz ggg
두번째로 각 출력문의 마지막에 추가 공백이 있으면 안된다. 딱 출력해야 되는 문장에서 추가 공백 없이 그것만 출력해야 된다. 그 이외에는 백준에서 '출력 형식이 잘못되었습니다'이 뜬다.
코드 : github
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String[]> arr = new ArrayList<>();
int max = 0;
while (true) {
String cur = br.readLine();
if (cur == null) break;
String[] tmp = cur.trim().split("\\s+");
max = Math.max(max, tmp.length);
arr.add(tmp);
}
StringBuilder[] res = new StringBuilder[arr.size()];
for (int i = 0; i < arr.size(); i++) res[i] = new StringBuilder();
for (int i = 0; i < max; i++) {
int maxWordLen = 0;
for (int j = 0; j < arr.size(); j++) {
String[] cur = arr.get(j);
if (cur.length-1 < i) continue;
maxWordLen = Math.max(maxWordLen, cur[i].length());
}
for (int j = 0; j < arr.size(); j++) {
String[] cur = arr.get(j);
if (cur.length-1 < i) continue;
res[j].append(cur[i]);
int gap = maxWordLen - cur[i].length();
if (cur.length-1 != i) {
for (int k = 0; k < gap; k++)
res[j].append(' ');
res[j].append(' ');
}
}
}
for (int i = 0; i < arr.size(); i++) {
if (i == arr.size()-1)
System.out.print(res[i]);
else
System.out.println(res[i]);
}
}
}
'PS > BOJ' 카테고리의 다른 글
백준 10373 자바 - Buffcraft (BOJ 10373 JAVA) (0) | 2022.01.17 |
---|---|
백준 8807 자바 - Przedziały (BOJ 8807 JAVA) (0) | 2022.01.16 |
백준 17245 자바 - 히스토그램 (BOJ 17245 JAVA) (0) | 2022.01.13 |
백준 4386 자바 - 별자리 만들기 (BOJ 4386 JAVA) (0) | 2022.01.12 |
백준 14248 자바 - 점프 점프 (BOJ 14248 JAVA) (0) | 2022.01.11 |
댓글