Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 세로 읽기 (Java/자바) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 세로 읽기 (Java/자바)

luke-king 2025. 12. 14. 21:01

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/181904

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


import java.util.*;

class Solution {
    public String solution(String my_string, int m, int c) {
        List<String> list = new ArrayList<>();
        
        for(int i = 0; i < my_string.length(); i+=m){
            list.add(my_string.substring(i, i + m));
        }
        
        StringBuilder sb = new StringBuilder();
        for(String s : list){
            sb.append(s.charAt(c - 1));
        }
        
        String answer = sb.toString();
        
        return answer;
    }
}

오늘 문제는 프로그래머스 "세로 읽기" 문제다.

문제 접근은 주어진 my_string 문자열 값을 m만큼 자른 다음 m번째 만큼 자른 그룹의 c번째 값을 출력해 문자열로 만드는 거다.

그럼 바로 풀이해보겠다.

 

1. 그룹을 만들어 주기 위해 List를 생성해 준다. 

 

2. for문을 사용해 준다. 여기서 i++이 아닌 i+=m을 해주는데 이유는 m만큼 잘라 그룹을 만들어 주기 위해다. 그러면 4,8,12,16,20...으로 각 그룹이 시작하게 된다. 다음 list.add()를 통해 저장해 주는데 substring()을 사용해 i번째부터 i + m 번째까지 잘라 저장해준다. 그럼 우리가 원하는 4,4,4... 그룹으로 만들어진다.

 

3. StringBuilder를 생성해준다.

 

4. for-each문을 사용해 list값을 출력해준다. list의 값은 이미 4개씩 그룹으로 나눠져 있으니 s.charAt()를 사용해 c - 1 즉 s 값의 c-1번째 값을 출력해 StringBuilder를 생성한 sb에 값을 넣어 준다.

 

5. 마지막으로 answer 변수에 sb값을 toString()으로 출력해주면 끝이다.

 

하지만 문제를 풀면서 다른 사람들의 풀이를 보니 훨씬 간편하고 좋은 코드가 있어 밑에 적어 두겠다.

class Solution {

    public String solution(String my_string, int m, int c) {
        String answer = "";

        for (int i = c - 1; i < my_string.length(); i += m) {
            answer += my_string.charAt(i);
        }
        return answer;
    }
}

훨씬 가독성 좋고 성능 또한 좋은 코드이다.