-
[알고리즘 문제] 백준 알고리즘 1225번 : 이상한 곱셈IT/알고리즘 2019. 3. 11. 12:30
문제를 읽고 내가 먼저 생각한 풀이 순서는
- 몫과 나머지를 이용해 숫자의 자릿수들을 구한 뒤 배열에 저장
- 2중 for문을 이용해 두 배열의 각 자릿수들을 곱하여 새로운 배열에 저장
- 새로운 배열에 저장한 숫자들을 전부 더한 후 출력
바로 코드를 보도록 하자
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879public 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번
'IT > 알고리즘' 카테고리의 다른 글
[알고리즘 문제] 백준 알고리즘 4458번 : 첫글자를 대문자로 (0) 2019.03.20 [알고리즘 문제] 팩토리얼 (0) 2019.03.18 [알고리즘 문제] 백준 알고리즘 2814번 : 최소인수 (0) 2019.03.17 [알고리즘 문제] 각 자리수의 역과 합 (2) 2019.01.08 [알고리즘 문제] 강아지와 병아리 (4) 2019.01.06