[프로그래머스]

[프로그래머스 LV1] 문자열을 정수로 바꾸기

jeayoung98 2024. 5. 19. 01:44

문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.

입출력 예

예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.

str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.


풀이 과정

  1. 부호 판별 후 음수일 경우 -1, 양수일 경우 1을 곱해줌
  2. s를 intStream으로 반환
  3. Character의 isDigit 메서드를 통해 숫자만 얻어냄
  4. Character의 getNumeric 메서드를 통해 char의 int 값을 얻어냄
  5. Stream의 reduce 메서드를 이용해 값을 하나로 만듦

import java.util.stream.*;

class Solution {
    public int solution(String s) {
        return (s.startsWith("-") ? -1 : 1) * s.chars()
            .filter(Character::isDigit)
            .map(Character::getNumericValue)
            .reduce(0, (a, b) -> a * 10 + b);
    }
}

궁금한 점

import java.util.stream.*;

class Solution {
    public int solution(String s) {
        String number = s.startsWith("-") ? s.substring(1) : s;
        
        return (s.startsWith("-") ? -1 : 1) * number.chars()
            .map(Character::getNumericValue)
            .reduce(0, (a, b) -> a * 10 + b);
    }
}

이렇게 했을 때 테스트 케이스를 여러 개 실패하는데 왜 그런지 모르겠음 ..

.filter(Character::isDigit)

map 전에 filter를 하면 되긴 하는데 인텔리제이에서 돌렸을 때는 filter없이도 잘만 돌아간다