극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 부분 문자열 이어 붙여 문자열 만들기

sundori 2023. 5. 29. 23:12

목차

    #1 부분 문자열 이어 붙여 문자열 만들기

    문제 설명

    길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts [i]는 [s, e] 형태로, my_string [i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

    제한사항

    • 1 ≤ my_strings의 길이 = parts의 길이 ≤ 100
    • 1 ≤ my_strings의 원소의 길이 ≤ 100
    • parts [i]를 [s, e]라 할 때, 다음을 만족합니다.
      • 0 ≤ s ≤ e < my_strings[i]의 길이

    입출력 예

    my_strings parts result
    ["progressive", "hamburger", "hammer", "ahocorasick"] [[0, 4], [1, 2], [3, 5], [7, 7]] "programmers"

    #2 코드 및 알고리즘

    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    class Solution {
        public String solution(String[] my_strings, int[][] parts) {
            String answer = IntStream.range(0, parts.length).mapToObj(i -> my_strings[i].substring(parts[i][0], parts[i][1] + 1)).collect(Collectors.joining());
            return answer;
        }
    }
    ------------------------------------------------
    import java.util.stream.Collectors;
    import java.util.stream.IntStream;
    class Solution {
        public String solution(String[] my_strings, int[][] parts) {
            String answer = "";
            for(int i = 0; i < parts.length; i++){
                answer += my_strings[i].substring(parts[i][0], parts[i][1] + 1);
            }
            return answer;
        }
    }

    풀이:

    • IntStream 사용보다는 단순히 for문 반복이 컴파일 속도면에서 더 빨랐다.
    • parts의 길이만큼 반복을 진행하며, my_string의 [i][0] 번 인덱스부터 [i][1] 번 인덱스까지의 문자열만 잘라낸다.
    • answer 문자열에 이어 붙이기를 진행한다.