문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
처음에는 m개씩 m/my_string.length()개 만큼 문자열이 묶인 2차원 배열을 만든 다음 my_string의 글자들을 넣으면 된다고 생각했다. 그런데 막상 코드를 실행해 보니 아래와 같은 오류가 발생했다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 0
2차원 배열을 초기화하는 과정에서 문제가 있었다. 당연함 ㅜ
삼중 for문을 쓴 것부터 좋은 코드는 아니지만, 이 상태에서 어떻게든 코드를 완성하고 싶어서 이렇게 바꾸고 저렇게 바꾸고 다 해봤다. 하지만 해결이 안 되어서 완전히 갈아 엎었다.
class Solution {
public String solution(String my_string, int m, int c) {
String answer = "";
String[][] arrs = new String[m][m/my_string.length()];
for(int n=0;n<my_string.length();n++){
for(int i=0;i<m;i++){
for(int j=0;j<m/my_string.length();j++){
arrs[i][j] = String.valueOf(my_string.charAt(n));
}
}
}
for(String[] arr : arrs){
String str = arr[c];
answer += str;
}
return answer;
}
}
증감식을 i++ 혹은 i-- 이렇게만 쓰니까 그걸 주어진 문제에 맞게 적절히 바꾸는 것에 매우 취약한 것 같다.
c는 인덱스가 아니라 순서이기 때문에 초기식은 int i=c-1;로 작성했고, my_string 길이 전까지 루프를 돌되 i가 m만큼 증가하면 되는 거였다. 글자수 등을 동일한 개수만큼 묶거나 할 때 증감식을 어떻게 바꿀 것인지를 먼저 생각하는 습관을 들여봐야겠다.
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;
}
}
