99클럽 코테 스터디 5일차 TIL + 세로읽기

sun·2025년 1월 17일
0
post-thumbnail

오늘의 학습 키워드 및 문제

#문자열 #2차원배열 #2차원리스트
[백준] 세로읽기
https://www.acmicpc.net/problem/10798

문제풀이

어떻게 구현을 해야하지 처음에 고민하는 시간이 꽤나 길었다.
보통 2차원 배열은 가로로 읽는데 세로읽기라니 어떻게 해야할지 감이 안왔던 것 같다.

  1. 2차원 배열 초기화 [5][15](크기가 정해져 있기 때문)
  2. 모든 입력 받기
  3. 2중 반복문으로 세로읽기
    3-1. 첫번째 반복문을 15까지 반복하도록 지정
    3-2. 두번째 반복문을 5까지 반복하도록 지정 [0][0] - [1][0] - [2][0] ...
    3-3. 2차원 배열의 행 길이가 첫번째 반복문보다 크면 문자 추가
  4. 반복문이 끝나면 출력
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[][] sArr = new String[5][15];
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<sArr.length; i++) {
            sArr[i] = br.readLine().split("");
        }

        for(int i=0; i<15; i++) {
            for(int j=0; j<5; j++) {
                if (sArr[j].length > i) {
                    sb.append(sArr[j][i]);
                }
            }
        }
        
        System.out.println(sb);
        br.close();
    }
}

다른방법

1. 2차원 배열을 사용하지 않아도 된다.

  • 입력 데이터의 고정 크기 배열 제거 (불필요한 배열 생성)
  • split("") 대신 charAt() 사용 (불필요한 배열 생성)
    (성공)
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sArr = new String[5];
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<sArr.length; i++) {
            sArr[i] = br.readLine();
        }

        for(int i=0; i<15; i++) {
            for(int j=0; j<5; j++) {
                if (sArr[j].length() > i) {
                    sb.append(sArr[j].charAt(i));
                }
            }
        }
        
        System.out.println(sb);
        br.close();
    }
}

2. 반복문에서 숫자를 지정하지 않아도 된다.

  • 각 단어의 최대 길이 계산 (Math.max() 사용)
    (성공)
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sArr = new String[5];
        int maxLength = 0;
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<sArr.length; i++) {
            sArr[i] = br.readLine();
            maxLength = Math.max(maxLength, sArr[i].length());
        }

        for(int i=0; i<maxLength; i++) {
            for(int j=0; j<sArr.length; j++) {
                if (sArr[j].length() > i) {
                    sb.append(sArr[j].charAt(i));
                }
            }
        }
        
        System.out.println(sb);
        br.close();
    }
}

공부한 내용정리

  • Math.max(a,b) 두 인자값 중 큰 값을 리턴하는 함수
profile
Please, Steadily

0개의 댓글

관련 채용 정보