Day3 - 문자 리스트를 문자열로 변환하기
📌 문제 정보
- 문제 이름 : 코딩 기초 테스트 - 문자 리스트를 문자열로 변환하기
- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181941
📌 문제 요약
- 핵심 조건: arr의 원소들을 순서대로 이어 붙인 문자열을 return
- 제한: 1 ≤ arr의 길이 ≤ 200 ( arr의 원소는 전부 알파벳 소문자로 이루어진 길이가 1인 문자열)
📌 내 풀이 및 코드
class Solution {
public String solution(String[] arr) {
StringBuilder sb = new StringBuilder();
for (int i=0; i<=arr.length-1; i++) {
sb.append(arr[i]);
}
return sb.toString();
}
}
- 이것도... 모르겠어서 힌트봄
- for 조건식 i=1, i<arr.length 로 하는게 더 간단함.
📌 다른 사람들 풀이
// 1
return String.join("", arr);
// 2
String answer = "";
for (String a : arr) {
answer += a;
}
// 3
return Arrays.stream(arr).collect(Collectors.joining());
// 4
StringBuilder sb = new StringBuilder();
for (String s : arr) {
sb.append(s);
}
return sb.toString();
<-- 다른 풀이 요약 -->
- 1 : String.join : StringBuilder 안 쓰고 한 줄로 해결. (내부적으로 StringBuilder처럼 처리함. 배열이면 가능하지만 int[]는 불가)
- 2 : for-each문 + += : StringBuilder 안 쓰고 그냥 + 연산으로 누적. (매번 새 String 객체를 만들어서 배열 길이 길면 효율 떨어짐)
- 3 : Stream + Collectors.joining : Stream API 사용 (StringBuilder처럼 처리 되고 스트림 방식은 깔끔함. 구분자 넣기 편함)
- 4 : 내 코드랑 거의 동일하지만 for (int i) 대신 for-each로 됨. (가독성이 좋음. 아주 추천하는 방)
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
** String.join **
- 문자열 배열 붙이기 (배열은 String[]만 가능하고 int[]는 안됨. -> 숫자 배열은 String[]으로 변환 후 사용할 수 있음.)
- 자동으로 StringBuilder처럼 처리하기 때문에 빠르고 간결함.
// 기본 개념
String result = String.join(구분자, 배열); // 구분자 : 원소들 사이에 넣고 싶은 문자
// 기본 예시
String[] arr = {"a", "b", "c"};
String result = String.join("", arr); // 구분자 없음
System.out.println(result); // "abc"
String result2 = String.join(",", arr); // 쉼표로 붙이기
System.out.println(result2); // "a,b,c"
** Stream + Collectors.joining **
- Stream으로 배열 또는 리스트를 순회. (Collectors.joining() 문자열 하나로 합침.)
- Collectors.joining()은 내부에서 StringBuilder를 사용함.
- 숫자 배열 (int[ ])는 바로 안 됨. -> boxed()로 Stream<Integer>로 바꿔야 함. (mapToObj로 변환 필요)
// 기본 예시
import java.util.Arrays;
import java.util.stream.Collectors;
String[] arr = {"a", "b", "c"};
String result = Arrays.stream(arr)
.collect(Collectors.joining());
System.out.println(result); // "abc"
// 구분자, 접두어, 접미어 추가한 경우
String result = Arrays.stream(arr)
.collect(Collectors.joining("-", "[", "]")); // 출력: [a-b-c]
// 자주 하는 실수 예시
int[] nums = {1, 2, 3};
String result = Arrays.stream(nums)
.mapToObj(String::valueOf) // int → String
.collect(Collectors.joining()); // result: "123"
.. 어려움.... 다시 보기