BOJ::1157 이상한 곱셈

https://www.acmicpc.net/problem/1225



이문제는 O(n*m) 으로 풀 수 도 있지만 조금만 생각해보면 훨씬 쉽게 풀 수있다.

123,45 의 경우

1x4 + 1x5 + 2x4 + 2x5 + 3x4 + 3x5

->1(4+5)+2(4+5)+3(4+5)

->(1+2+3)(4+5)

이렇게 풀 수있다..


이외에도 정답률이 낮은 이유는 문제에서 주어진 숫자는 10000'자리' 숫자인데 

이를 입력받을 때 숫자로 입력 받으려 한것과, long 형을 쓰지 않아서 인것 같다.

나도 int 형으로 풀다가 틀렸었다!



JAVA


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String a = st.nextToken();
        String b = st.nextToken();
        
        String aa[]=a.split("");
        String bb[]=b.split("");
        int n = aa.length;
        int m = bb.length;
        long sumA=0,sumB=0;
        for(int i = 0 ; i < n ; i++){
            sumA+=Integer.parseInt(aa[i]);
        }
        for(int i = 0 ; i < m ; i++){
            sumB+=Integer.parseInt(bb[i]);
        }
        
        long res = sumA*sumB;
        System.out.println(res);
    }    
}
cs



C++


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    string a, b;
    cin >> a >>b;
    int n = a.length();
    int m = b.length();
    long sumA = 0, sumB = 0;
 
    for (int i = 0; i < n; i++) {
        sumA += a.at(i) - '0';
    }
    for (int i = 0; i < m; i++) {
        sumB += b.at(i) - '0';
    }
    long res = sumA * sumB;
    cout << res << endl;
}
cs


'BOJ::문제풀이' 카테고리의 다른 글

1302 베스트 셀러  (0) 2017.12.31
1260 DFS와 BFS  (0) 2017.12.31
1157 단어 공부  (0) 2017.12.30
1152 단어의 개수  (0) 2017.12.30
1149 RGB거리  (0) 2017.12.30

+ Recent posts