Kolin
142
2021-04-08 12:38:06 작성 2021-04-08 12:39:37 수정됨
5
202

안녕하세요. 자바 알고리즘 질문있습니다!


package K;


public class Main_K {


public static void main(String[] args) {

int n = 912324211;

int[] arr = new int[10];


while(n>0) {

arr[n%10]++;

n /=10;

}

for(int j = 0; j < 10; j++) {

System.out.println(j+":"+arr[j]);

}

}

}


 위에 문제는 각 자릿수의 갯수를 구하는 문제에요!

여기서 int의 값을 늘려주기 위해 ' int n '을 ' long n '으로 바꿔줬습니다. 그래도 범위가 커지지가 않아서

여기에 질문 남깁니다!! 선생님들의 조언이 궁금합니다!

0
  • 답변 5

  • antop
    954
    2021-04-08 13:41:32

    n의 자릿수를 계산해서 배열의 크기를 만들어야합니다.

    이것이 싫으시면 가변 크기를 가지는 List  같은 걸 사용하면 되겠네요.

  • 20170923
    1k
    2021-04-08 14:10:26

    각 자릿수의 갯수라는게 912324211에서 10의 자리면 1 100의 자리를 구하면 2를 구한다는 말씀이신가요?

  • Kolin
    142
    2021-04-08 16:49:45

     

    20170923 네네! 각 자리의 수를 따로 구해서 0~9까지 각각 몇개가 나오는지 계산해보는 문제입니다!
  • 20170923
    1k
    2021-04-08 17:08:47

    우선 int 자료형은 2147483647 ~ - 2147483648까지라서 위 숫자로는 거뜬할 것 같구요

    arr[n%10]++; 이 부분이 문제인 거 같습니다.


    while(n>0) {
      if(arr[n%10] == null) {
        arr[n%10] = 0;
      }
    
      arr[n%10]++;
      n /= 10;
    }

    또는

    Arrays.fill(arr,0);
    while(n>0){
      ....

    이런식으로 배열 값 초기화 해주시면 정상적으로 동작할 거 같습니다.

  • Kolin
    142
    2021-04-08 17:31:56 작성 2021-04-08 17:32:14 수정됨

      

    20170923 혹시  int 자료형 2147483647 ~ - 2147483648를 초과한다면 어떻게 코드를 바꿔야 하는지 알려주실 수 있나요?? int를 long으로 바꿔도 해결이 되지가 않아서요ㅜㅜ

  • 로그인을 하시면 답변을 등록할 수 있습니다.