Language/JAVA

[프로그래머스] 자릿수 더하기 + Stream참고자료

paran21 2022. 1. 18. 00:16

 

이 문제의 포인트는 int를 int배열로 만드는 방법이다.

1) for문을 이용하는 방식 :  10의 배수를 이용. 자리수를 구한 후 for문을 이용(1자리 수부터 거꾸로 계산)

2) Stream을 이용하는 방식

  1. split을 이용하기 위해 String으로 변환
  2. mapToInt를 이용하여 int[]로 변환하기 위해 Stream<String>으로 변환
import java.util.*;
import java.util.stream.Stream;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        //Arrays.asList()는 primitive타입을 Wrapper클래스로(int를 Integer) X, 사용할 수 없음.
        //int를 string으로 변환 후 split으로 잘라서 string[]을 만듦
        String[] arr = String.valueOf(n).split("");
        //stream을 이용하기 위해 변환
        ////Collection타입(collection, list, set)은 list.stream()으로 변환 가능
        Stream<String> arr2 = Arrays.stream(arr);
        //mapToInt를 이용하여 int형의 배열로 변환
        int[] num = arr2.mapToInt(Integer::parseInt).toArray();
        //이 모든 변환과정을 한 줄로 표현하면
        //int[] num = Stream.of(String.valueOf(n).split("")).mapToInt(Integer::parseInt).toArray();
        for (int i = 0; i < num.length; i++) {
            answer += num[i];
        }
        return answer;
    }
}

Stream의 특성상 int배열로 변환하는 코드를 한줄로도 쓸 수 있는데, 그 경우 실행시 속도가 비교적 느려지는 것 같다.

 

+ Stream 별도정리 : https://paran21.tistory.com/48