[프로그래머스]
[프로그래머스 LV1] 문자열을 정수로 바꾸기
jeayoung98
2024. 5. 19. 01:44
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
제한 조건
- s의 길이는 1 이상 5이하입니다.
- s의 맨앞에는 부호(+, -)가 올 수 있습니다.
- s는 부호와 숫자로만 이루어져있습니다.
- s는 "0"으로 시작하지 않습니다.
입출력 예
예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
풀이 과정
- 부호 판별 후 음수일 경우 -1, 양수일 경우 1을 곱해줌
- s를 intStream으로 반환
- Character의 isDigit 메서드를 통해 숫자만 얻어냄
- Character의 getNumeric 메서드를 통해 char의 int 값을 얻어냄
- 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없이도 잘만 돌아간다