문제 설명
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
제한사항
- 1 ≤ number의 길이 ≤ 100,000
- number의 원소는 숫자로만 이루어져 있습니다.
- number는 정수 0이 아니라면 숫자 '0'으로 시작하지 않습니다.
입출력 예
number | result |
"123" | 6 |
"78720646226947352489" | 2 |
import java.util.stream.IntStream;
class Solution {
public int solution(String number) {
int answer = 0;
answer = IntStream.range(0, number.length())
.map(i -> number.charAt(i) - '0')
.sum() % 9;
return answer;
}
}
야악간 tricky했다.
number를 그냥 % 9하면 될 거 같지만 실제로 해 보면
테스트 케이스에 long(Long도 되나?)이 들어온다.
그래서 answer 타입을 long(Long)으로 바꿔보면 값 손실이 일어날 수 있어서 그대로 진행할 수 없다는 에러 메시지가 뜬다.
따라서 위와 같은 식으로 풀어야 한다.
여기서 배운 건,
예를 들어, '3' - '0'은 int 3이라는 거.
그리고 sum()에 바로 연산할 수 있다는 거.
class Solution {
public int solution(String number) {
return number.chars().map(c -> (c - '0') % 9).sum() % 9;
}
}
이 코드도 참 괜찮은 거 같다.
스트링에 chars()를 쓰면 각 글자가 intstream으로 변한다.
map으로 하나씩 찍어서 - '0'해서 정수로 만들고
% 9 해서 전체 수의 부피를 줄이고
그걸 다 더한 다음 % 9하면
원래 수를 % 9 한 거나
원래 수의 각 자리 수를 다 더해서 % 9한 거랑 같다.
참치를 통째로 해체쇼 하느냐
부위별로 나눈 뒤 해체쇼 하느냐
가능한 한 작게 만든 뒤 해체쇼 하느냐 그 차이다.