본문 바로가기
코딩테스트 연습

9로 나눈 나머지

by 신재은👩🏼‍💻 2024. 4. 13.

문제 설명

음이 아닌 정수를 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한 거랑 같다.

 

참치를 통째로 해체쇼 하느냐

부위별로 나눈 뒤 해체쇼 하느냐

가능한 한 작게 만든 뒤 해체쇼 하느냐 그 차이다.

'코딩테스트 연습' 카테고리의 다른 글

가장 큰 수 찾기  (0) 2024.04.13
코드 처리하기  (0) 2024.04.13
접미사 배열  (0) 2024.04.12
가까운 1 찾기  (0) 2024.04.12
문자열 잘라서 정렬하기  (0) 2024.04.12