문제설명
문자열 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를 호출하여 누적 연산하므로 불변성을 해칠 염려는 없다.
'코딩테스트 - 프로그래머스 > Lv. 0' 카테고리의 다른 글
[15] JAVA 두 수의 연산값 비교하기 (0) | 2023.11.15 |
---|---|
[14] JAVA 더 크게 합치기 (0) | 2023.11.15 |
[12] JAVA 문자 리스트를 문자열로 변환하기 (1) | 2023.11.15 |
[11] JAVA 문자열 섞기 (0) | 2023.11.14 |
[10] JAVA 문자열 겹쳐쓰기 (0) | 2023.11.14 |