자라나라 개발머리

[프로그래머스/JAVA] 잘라서 배열로 저장하기 본문

알고리즘/프로그래머스

[프로그래머스/JAVA] 잘라서 배열로 저장하기

iammindy 2023. 3. 16. 17:24

문제 정보

문제 설명

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_str의 길이 ≤ 100
  • 1 ≤ n  my_str의 길이
  • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

입출력 예

my_str n result
"abc1Addfggg4556b" 6 ["abc1Ad", "dfggg4", "556b"]
"abcdef123" 3 ["abc", "def", "123"]

 

한 줄 메모

내가 이딴 문제를 못 풀다니? 싶었던 문제. 현타도 엄청 오고 동기부여도 되는 문제였다.

 

풀이과정

답안 1

class Solution {
    public String[] solution(String my_str, int n) {
        
        String[] answer = my_str.split("(?<=\\G.{" + n + "})");
        return answer;
        
    }
}

 

split() 함수에 정규표현식을 사용하여 조건 만들었다.

(?<=\\G.{" + n + "})의 의미를 하나씩 풀어서 설명해보자면,

 

(?<=) 긍정형 후방탐색
일치하는 패턴을 찾으면서(긍정형), 기준이 되는 이전 문자열을 리턴하지 않는다.(후방탐색)


\\G 이전 매칭이 끝난 지점에서 시작

 

.{"+n+"} 임의의 문자 n개

. 임의의 문자 1개 

{"+n+"} 반복수

 

한 줄 메모

구글링 해본 답안 중 가장 간결했던 답안이지만, 실제로 내가 코딩할 땐 정규표현식을 찾기 번거로워서 쓰기 힘들 것 같다.

 

답안 2

class Solution {
    public String[] solution(String my_str, int n) {
        
        //배열 크기 저장
        int len = my_str.length()%n==0 ? my_str.length()/n : (my_str.length()/n)+1;
        String[] answer = new String[len];
        
        //배열에 문자열 잘라 저장
        for (int i=0; i<len; i++) {
            answer[i] = my_str.substring(i*n,(i+1)*n > my_str.length() ? my_str.length() : (i+1)*n );
        }
        
        return answer;
        
    }
}

삼항 연산자가 주가 되는 답안이다.

 

한 줄 메모

구글링 한 것 중 가장 맘에 드는 코드!

삼항 연산자를 잘 사용한 코드라고 생각한다. 앞으로 알고리즘 짤 때 삼항연산자도 고려해보아야겠다.

특히, 배열에 문자열을 잘라 저장할 때 사용된 코드가 내 머리에선 나올 수 없을 것 같은 코드였다.

더 컴퓨터같이 생각하자 ㅋㅋ!