코딩테스트 - 프로그래머스/Lv. 0

[13] JAVA 문자열 곱하기

유혁스쿨 2023. 11. 15. 12:20
728x90
반응형

문제설명

문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return하는 solution함수를 작성해 주세요.

 

제한사항

  • 1 <= my_string의 길이 <= 100
  • my_string 은 영소문자로만 이루어져 있습니다.
  • 1 <= k <= 100

입/출력 예

my_string k result
"string" 3 "stringstringstring "
"love" 10 "lovelovelovelovelovelovelovelovelovelove"

 

입/출력 예 #1

  • 예제 1번의 my_string은 "string"이고 이를 3번 반복한 문자열은 "stringstringstring"이므로 이를 return합니다.

입/출력 예 #2

  • 예제 2번의 my_string은 " love "이고 이를 10번 반복한 문자열은 " lovelovelovelovelovelovelovelovelovelove "이므로 이를 return합니다.

[제출 답안]

class Solution {
    public String solution(String my_string, int k) {
        boolean isMatches = my_string.matches("^[a-z]+");
        String answer = "";
        if(my_string.length() >= 1 && my_string.length() <= 100 && k >= 1 && k <= 100 && isMatches) {
            answer = my_string.repeat(k);
        }
        return answer;
    }
}

 

 

[풀이과정] 

String.repeat(int idx)를 활용하였다.

repeat() 메소드는 주어진 문자열을 매개변수 int값 만큼 반복하여 저장한다.

불변성을 해치지도않는다!


[다른 풀이]

1) IntStream.range(start,end) / mapToObejct() / collect(Collectors.joining())

 

class Solution {
	public String solution(String my_string, int k) {
    	return IntStream.range(0,k).mapToObject(x->my_string).collect(Collectors.joining());
    }
}

 

IntStream의 range 메소드를 적용하여 0부터 k-1까지 순차적으로 정수값을 생성한 stream을 반환한다.

mapToObject메소드로 반환된 정수값들을 기준으로 my_string 객체를 반복하여 매핑한 stream을 다시 반환한다.

collect메소드를 통해 해당 stream에 존재하는 모든 요소를 수집한 뒤 Collectors의 joining() 을 통해 누적으로 연산한다.

 

ranceClose(1,k) 로도 가능하다. 1과 k를 포함하는 범위다.

 

2) String.join() / Collections.nCopies(int n, T obj) 

return String.join("", Collections.nCopies(k, my_string))

 

nCopies() : 지정된 obj를 n개의 복사본으로 구성된 불변 List를 만든다. (반환타입 : List)

String.join을 통해 해당 List를 반복하여 누적으로 연산한다.

join을 다시 설명해보자면 내부적으로 StringBuffer를 호출하여 누적 연산하므로 불변성을 해칠 염려는 없다.

728x90
반응형