728x90
🔗 문제 링크
https://www.acmicpc.net/problem/10798
📌 문제 개요
5개의 문자열이 주어지고 이를 세로 방향으로 읽어 하나의 문자열로 출력하는 문제
각 문자열의 길이는 서로 다를 수 있으며, 해당 위치에 문자가 없는 경우에는 건너뛰어야 한다.
예를 들어 다음과 같은 문자열이 주어지면, 출력은 세로 방향으로 읽은 문자열이 된다.
ABCDE
abc
012345
XYZ
pq
📌 접근 방법
일반적으로 문자열을 처리할 때는 행 기준으로 순회하지만
이 문제는 세로 방향으로 읽어야 하므로 열 기준으로 순회해야 한다.
따라서 다음과 같은 방식으로 접근
- 문자열 5개를 배열에 저장한다.
- 가장 긴 문자열 길이만큼 반복문을 돌린다.
- 각 열에서 5개의 문자열을 확인한다.
- 해당 문자열 길이보다 열 인덱스가 작으면 문자를 출력한다.
이렇게 하면 존재하는 문자만 세로로 읽을 수 있다.
📌 핵심 아이디어
문자열 길이가 서로 다르기 때문에
단순히 charAt()을 사용하면 IndexOutOfBoundsException이 발생할 수 있다.
따라서 반드시 다음 조건을 체크
if (j < arr\[i\].length())
이 조건을 통해 해당 위치에 문자가 존재할 때만 출력
📌 전체 코드
package no_10798;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class No10798 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = new String[5];
for(int i = 0; i < 5; i++){
arr[i] = br.readLine();
}
for(int j = 0; j < 15; j++){
for(int i = 0; i < 5; i++){
if(j < arr[i].length()){
System.out.print(arr[i].charAt(j));
}
}
}
}
}
📌 정리
이 문제의 핵심은 세로 탐색 방식이다.
일반적인 2차원 배열 탐색과 달리 열 → 행 순서로 반복문을 구성해야 한다.
또한 문자열 길이가 서로 다르기 때문에
문자가 존재하는지 length() 체크 후 출력해야 한다.
시간복잡도는 최대 5 × 15 정도이므로 매우 가볍게 해결할 수 있는 구현 문제
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| [백준] 24313번 : 알고리즘 수업 - 점근적 표기 1 (JAVA) (0) | 2026.03.16 |
|---|---|
| [백준] 2846번 : 오르막길 (JAVA) (0) | 2026.03.16 |
| [백준] 11728번 : 배열 합치기 (JAVA) (0) | 2026.03.13 |
| [백준] 2309번 : 일곱 난쟁이 (JAVA) (0) | 2026.03.12 |
| [백준] 1417번 : 국회의원 선거 (JAVA) (0) | 2026.03.11 |