프로그래머스 - level 0 문자 리스트를 문자열로 반환하기
일단은 단순하게 풀었다.
class Solution {
public String solution(String[] arr) {
String answer = "";
for(int i=0; i<arr.length; i++) {
answer+=arr[i];
}
return answer;
}
}
원래 쓰고 싶었던 방식. arr.stream()으로 해서 안됐다. Arrays와 stream()에 대한 이해가 부족하긴 한 듯.
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String[] arr) {
return Arrays.stream(arr).collect(Collectors.joining());
}
}
이것도 있더라.... String.join()
class Solution {
public String solution(String[] arr) {
return String.join("", arr);
}
}
chatGPT에게 세 코드를 비교해달라고 했다.
- 가독성:
- 첫 번째 방식은 명시적인 루프를 사용하므로 좀 더 직관적이지만 코드가 길어질 수 있습니다.
- 두 번째와 세 번째 방식은 라이브러리 메서드를 사용하므로 더 간결하고 읽기 쉬울 수 있습니다.
- 효율성:
- 두 번째와 세 번째 방식은 내부적으로 최적화되어 있어 더 효율적일 수 있습니다. 특히, 세 번째 방식은 스트림을 이용하므로 병렬 처리도 간단하게 적용할 수 있습니다.
- 유연성:
- 두 번째와 세 번째 방식은 구현이 라이브러리에 의존하므로 더 추상화되어 있고, 이는 유지보수 및 확장성에 도움이 될 수 있습니다.
모든 방식은 주어진 문제를 해결하는 데 유효하며, 선택은 코드의 선호도와 상황에 따라 달라질 수 있습니다. Java 8 이상의 버전을 사용한다면 두 번째나 세 번째 방식을 선호하는 것이 좋습니다.
시간복잡도 평가
- For Loop 사용:
- for 루프를 사용하여 배열의 모든 요소를 순회하므로 O(n)입니다. (n은 배열의 길이)
- String.join 메서드 사용:
- String.join 메서드는 내부적으로 StringBuilder를 사용하며, 각 문자열을 복사하는 비용은 O(n)입니다. 전체적으로는 O(n)입니다.
- Stream 및 Collectors.joining 사용:
- Arrays.stream(arr)은 O(n) 시간이 소요됩니다.
- Collectors.joining()은 내부적으로 StringBuilder를 사용하며, 각 문자열을 복사하는 비용은 O(n)입니다. 전체적으로는 O(n)입니다.
따라서 이러한 방법들은 모두 선형 시간 복잡도를 갖고 있습니다.
'Study with me > 프로그래머스 L0 마스터하기' 카테고리의 다른 글
프로그래머스 - L0 문자열잘라서정렬하기 // sort() & split() (0) | 2024.01.10 |
---|---|
프로그래머스 - L0 외계행성의나이 (0) | 2024.01.09 |
프로그래머스 - L0 배열회전시키기 // 배열 복사 (1) | 2024.01.07 |
프로그래머스 - L0 약수구하기 (0) | 2024.01.07 |
프로그래머스 - L0 덧셈식출력하기 // print( int → String ) (0) | 2024.01.06 |