ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘 문제] 백준 알고리즘 1225번 : 이상한 곱셈
    IT/알고리즘 2019. 3. 11. 12:30



    문제를 읽고 내가 먼저 생각한 풀이 순서는

    1. 몫과 나머지를 이용해 숫자의 자릿수들을 구한 뒤 배열에 저장
    2. 2중 for문을 이용해 두 배열의 각 자릿수들을 곱하여 새로운 배열에 저장
    3. 새로운 배열에 저장한 숫자들을 전부 더한 후 출력


    바로 코드를 보도록 하자


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    public class StrangeMult {
     
        public static void main(String[] args) {
     
            Scanner scan = new Scanner(System.in);
            
            //숫자 입력
            int num = scan.nextInt();
            int num2 = scan.nextInt();
            
            //입력받은 수가 몇자리수인가?
            int count = 1;
            int count2 = 1;
            
            //입력받은 숫자의 각 자리수를 구하기 위한 변수
            int mok = num;
            int mok2 = num2;
            int namuge = 0;
            int namuge2 = 0;
            
            
            //입력받은 숫자 몇자리수인지 구해서 count에 저장
            while(mok > 10) {
                mok = mok/10;
                count++;
            }
            
            while(mok2 > 10) {
                mok2 = mok2/10;
                count2++;
            }
            
            
            //각 자릿수를 저장할 배열
            int[] numArray = new int[count];   
            int[] numArray2 = new int[count2];
            
            //첫번째 숫자와 두번째 숫자의 곱을 저장할 변수
            int[] numArray3 = new int[count*count2];
            
            int i=0;
            
            
            //각 자릿수들을 배열에 저장
            while(num > 0) {        
                numArray[i] = num%10;
                num = num/10;
                i++;
            }
            
            int j = 0;
            while(num2 > 0) {
                numArray2[j] = num2%10;
                num2 = num2/10;    
                j++;
            }
            
            
            int k=0;
            
            //첫번째 숫자와 두번째 숫자 각 자릿수를 곱한값을 배열에 저장
            for(i=0; i<numArray.length; i++) {
                for(j=0; j<numArray2.length; j++) {
                    numArray3[k] = numArray[i]*numArray2[j];
                    k++;
                }
            }
            
            int sum =0;
            
            //각 인데스에 저장되어 있는 숫자들 더하기
            for(i=0; i<numArray3.length; i++) {
                sum += numArray3[i];
            }
            
            System.out.println(sum);
        }
     
    }
    cs

     


     아직 리스트 사용이 어색하여 리스트를 활용하여 문제를 풀어보려고 했으나 각 자릿수 인덱스를 이용해야할 것 같아 배열로 바꿨다 ㅎ;; 역시 많이 써본게 편한 것



    결과창






    제대로 동작하긴 하지만 온갖 변수들과 반복문을 이용해 풀어서 쓸데없이 코드가 길어복잡해보이고 비효율적인 것같다. 좀 더 코드를 간단하게 할 방법을 찾아봐야겠다.





    출처 : Olympiad > USA Computing Olympiad > 2007-2008 Season > USACO February 2008 Contest > Bronze 3번

    • 문제를 번역한 사람: author5
    • 문제의 오타를 찾은 사람: cubelover


    댓글

Designed by Tistory.