일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CSRF
- 모의해킹
- 웹해킹
- SQL Injection
- hackerrank
- leetcode
- Suninatas
- Algorithm
- 써니나타스
- study
- StringBuilder
- metasploit
- java
- 정보시스템
- todo
- ToDoList
- 취약점진단
- 미터프리터
- HTML Injection
- SQLMap
- 취약점
- wpscan
- programmers
- Router
- meterpreter
- stock price
- todo List
- 모드 설정
- algotithm
- 라우터
- Today
- Total
보안 / 개발 챌린저가 목표
[AlphaGo Study] [LeetCode] [JAVA] 43. Multiply Strings 본문
[AlphaGo Study] [LeetCode] [JAVA] 43. Multiply Strings
햄미은서 2020. 10. 15. 11:48
문제 설명
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.
제한 사항
☞ The length of both num1 and num2 is < 110.
☞ Both num1 and num2 contain only digits 0-9.
☞ Both num1 and num2 do not contain any leading zero, except the number 0 itself.
☞ You must not use any built-in BigInteger library or convert the inputs to integer directly.
입출력 예
Input | Output | |
num1 | num2 | |
"2" | "3" | "6" |
"123" | "456" | "56088" |
입출력 예 설명
#예제1
문자열(String) 2와 3을 곱셈(연산)하여 문자열(String) 6이 결과값으로 나온다.
leetcode.com/problems/multiply-strings/
문제를 풀기 전 THINK
§ 곱셈 결과의 길이의 최대는 두 수의 길이를 더한 것과 같음. ex) 999*999=998001
§ 값이 없거나 0일 경우 각각 빈 값과 0 return.
§ 뒷 자리부터 곱셈을 시작하므로 제일 큰 값에서 -1씩 내려감.
§ 숫자를 num1, num2에서 각각 하나씩 추출하여 곱셈을 함.
§ 이 때, if문을 사용하여 몫과 나머지를 구하여 각각 변수에 넣어줌.
§ i + j = 0일때, 더 이상 앞으로 넘길 값이 없으므로 if문에 들어가지 않도록 함.
§ 결과를 출력할 때, i = 0으로 시작하므로 res_len에서 -1한 값까지 for문을 돌림.
나의 Solution
public class MultiplyStrings {
public static String multiply(String num1, String num2) {
int num1_len = num1.length();
int num2_len = num2.length();
int res_len = num1_len + num2_len; // 곱셈 결과의 길이의 최대는 두 길이를 더한 것과 같음 ex) 999*999=998001
int[] res = new int[res_len];
StringBuilder result = new StringBuilder();
// 값이 없으면 빈 값 return
if(num1 == null || num2 == null) {
return "";
} // if end
// 0을 곱하면 0이므로 둘 중 하나만 0이어도 0을 return
if(num1.equals("0") || num2.equals("0")) {
return "0";
} // if end
// 맨 뒷 자리부터 곱셈 시작
for(int i = num1_len - 1; i >= 0; i--) {
for(int j = num2_len - 1; j >= 0; j--) {
int num1_int = num1.charAt(i) - '0'; // 숫자 하나 추출
int num2_int = num2.charAt(j) - '0';
res[i + j] += num1_int * num2_int; // 넘겨온 숫자와 곱한 값을 더함
// i + j = 0 이면 더 이상 앞으로 넘길 값이 없음
if(res[i + j] >= 10 && i + j != 0) {
res[i + j - 1] += res[i + j] / 10; // 몫을 다음 자릿 수에 넘겨서 더함 ex) 18이면 1을 넘겨줌
res[i + j] = res[i + j] % 10; // 나머지를 저장
} // if end
} // for end
} // for end
// 0 부터 시작이므로 res_len에서 1 뺌
for(int i = 0; i < res_len - 1; i++) {
result.append(res[i]);
} // for end
return result.toString();
}
}
Comment...
처음에 if문에서 i + j != 0 의 조건을 줄 생각을 하지 못했다. 이클립스에서는 돌아가서 leetcode에서도 Submit 해봤는데 돌아가지 않았다...ㅠㅠ 그래서 결과를 찾은 것이 이것!
그리고 res[i + j] += num1_int * num2_int 이것도 처음엔 + 할 생각을 하지 못하고 단순하게 값만 대입해주었다. 그랬더니 값이 더해지지 않고 이상하게 출력되었다..ㅜ 찾느라 힘들었다....
'Development > Algorithm' 카테고리의 다른 글
[AlphaGo Study] [Programmers] [JAVA] 스킬트리 (0) | 2020.10.22 |
---|---|
[AlphaGo Study] [LeetCode] [JAVA] 15. 3 Sum (0) | 2020.10.17 |
[AlphaGo Study] [LeetCode] [JAVA] 136. Single Number (0) | 2020.10.06 |
[AlphaGo Study] [LeetCode] [JAVA] 1. Two Sum (0) | 2020.10.04 |
[AlphaGo Study] [Programmers] [JAVA] 큰 수 만들기 (0) | 2020.10.03 |