
난이도: ★★☆☆☆ • solved on: 2025-07-05


char[] 1차원 문자 배열String[] 문자열 배열
- 문제 분해
- 입력을 한 줄씩 받아 각 글자를 1차원 char 배열의 인덱스(j*5+i)에 저장
- 마지막에 result 배열을 순차적으로 탐색하면서 '\0'이 아닌 문자만 StringBuilder에 추가
- 핵심 로직 흐름
for i = 0 to 4: 각 줄의 문자 j에 대해 result[j*5+i]에 저장 result 배열을 순회하며 '\0'이 아닌 값만 출력
- 예외 처리
- 입력이 5줄이 안 될 경우 null 체크
- result 배열 크기를 75(15×5)로 선언
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] result = new char[75];
for(int i = 0; i < 5; i++){
String line = br.readLine();
if(line == null){
break;
}
char[] rows = line.toCharArray();
for(int j = 0; j < rows.length; j++){
result[j*5+i] = rows[j];
}
}
for(int i = 0; i < 75; i++){
if(result[i] != '\0'){
sb.append(result[i]);
}
}
System.out.println(sb.toString());
}
}
- 문제 분해
- 입력값을 String 배열에 저장, 각 줄의 최대 길이(
maxLen)를 따로 구함- 세로(열 우선)로 0~
maxLen-1까지 순회, 각 행에 대해 해당 인덱스의 문자가 존재하면 StringBuilder에 추가
- 핵심 로직 흐름
for j = 0 to maxLen-1: for i = 0 to 4: arr[i]의 길이가 j보다 크면 arr[i].charAt(j) 추가
- 예외 처리
- 각 줄의 길이가 다를 수 있으므로 인덱스 초과 방지
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = new String[5];
int maxLen = 0;
for (int i = 0; i < 5; i++) {
arr[i] = br.readLine();
maxLen = Math.max(maxLen, arr[i].length());
}
StringBuilder sb = new StringBuilder();
for (int j = 0; j < maxLen; j++) {
for (int i = 0; i < 5; i++) {
if (arr[i].length() > j) {
sb.append(arr[i].charAt(j));
}
}
}
System.out.println(sb);
}
}
방법 1
- 시간 복잡도 : O(1) (입력이 작으므로 사실상 상수)
- 공간 복잡도 : O(1) (char[75]만 사용)
방법 2
- 시간 복잡도 : O(1)
- 공간 복잡도 : O(1) (String[5]만 사용, 불필요한 패딩 없음)