CODING TEST/programmers

Day3 - 문자 리스트를 문자열로 변환하기

iamyuunzo 2025. 7. 10. 10:58

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 문자 리스트를 문자열로 변환하기

- 문제 링크: 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"

.. 어려움.... 다시 보기