본문 바로가기
개발로그/알고리즘

프로그래머스 Lv.0 세로 읽기

by 쩜징 2023. 7. 24.

프로그래머스 Lv.0 세로 읽기


문자열 my_string과 두 정수 m,c가 주어진다.

my_stirng을 한 줄에 m글자씩 가로로 적었을 때

왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return하라.

 

** 풀이 방법

 

my_string 문자열을 문자 하나하나씩 접근할 것이므로

my_string의 길이만큼 for문을 돌린다.

for (int i=0; i<my_string.length(); i++) {
    char ch = my_string.charAt(i);
    ...
}

 

문자 m개씩 잘라야 하므로

순서대로 answer에 담다가

i+1의 값을 m으로 나눴을 때 나머지가 0이라면

지금까지 담았던 answer문자열을 list에 저장한다.그리고 다시 문자열을 비워서 my_string의 길이가 끝날 때까지 반복한다.

List<String> list = new ArrayList<>(); //m개씩 자른 문자열을 저장할 ArrayList

for (int i=0; i<my_string.length(); i++) {
    char ch = my_string.charAt(i); //문자 하나하나씩 접근 
    if ((i+1) % m == 0) { 
        answer += ch;
        list.add(answer); //m개씩 자른 문자열 저장하기
        answer = ""; //answer 비워서 다시 저장할 준비
    } else
        answer += ch; //m개 전까지 answer문자열에 더하기
}

 

이번엔 이중 for문을 통해

list의 i번째 원소를 문자로 하나하나씩 접근한다.

원소의 문자위치가 c와 같다면최종 결과인 res 문자열에 더해준다.

 for (int i=0; i<list.size(); i++) {
    for (int j=0; j<list.get(i).length(); j++) {
    	char ch = list.get(i).charAt(j);
    	if (j+1 == c)
        	res += ch;
    }
}

 

<> 전체 코드 </>

import java.util.*;
class Solution {
    public String solution(String my_string, int m, int c) {
        String answer = ""; String res = "";
        List<String> list = new ArrayList<>();
        for (int i=0; i<my_string.length(); i++) {
            char ch = my_string.charAt(i);
            if ((i+1) % m == 0) {
                answer += ch;
                list.add(answer);
                answer = "";
            } else
                answer += ch;
        }
        for (int i=0; i<list.size(); i++) {
            for (int j=0; j<list.get(i).length(); j++) {
                char ch = list.get(i).charAt(j);
                if (j+1 == c)
                    res += ch;
            }
        }
        return res;
    }
}

 

반응형

댓글