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 |