Study with me/프로그래머스 L0 마스터하기
프로그래머스 - L0 두수의합
외계나무
2024. 4. 19. 14:10
String -> int[] -> String 으로 풀었는데, 테스트 31만 실패가 뜬다.
반례 고민중...
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String a, String b) {
String answer = "";
int[] arr = new int[a.length()+1];
int[] brr = new int[b.length()+1];
for(int i=0; i<a.length(); i++) {
arr[i+1] = a.charAt(i)-'0';
}
for(int i=0; i<b.length(); i++) {
brr[i+1] = b.charAt(i)-'0';
}
if(arr.length >= brr.length) {
for(int i=0; i<brr.length; i++) {
arr[arr.length-i-1] += brr[brr.length-i-1];
if(arr[arr.length-i-1] > 9) {
arr[arr.length-i-1] -= 10;
arr[arr.length-i-2] += 1;
}
}
answer = Arrays.stream(arr)
.mapToObj(String::valueOf)
.collect(Collectors.joining());
} else {
for(int i=0; i<arr.length; i++) {
brr[brr.length-i-1] += arr[arr.length-i-1];
if(brr[brr.length-i-1] > 9) {
brr[brr.length-i-1] -= 10;
brr[brr.length-i-2] += 1;
}
}
answer = Arrays.stream(brr)
.mapToObj(String::valueOf)
.collect(Collectors.joining());
}
if(answer.charAt(0) == '0') answer = answer.substring(1);
return answer;
}
}
케이스 1 + 999 = 1000으로 확인 완료...
코드 구상하던 초반에는 생각을 하던 문제였는데 안 적어두니까 잊어버린 모양이다.
다음엔 주석이나 테스트 케이스에 일단 적어두고 코드를 짜야지..
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String a, String b) {
String answer = "";
int[] arr = new int[a.length()+1];
int[] brr = new int[b.length()+1];
for(int i=0; i<a.length(); i++) {
arr[i+1] = a.charAt(i)-'0';
}
for(int i=0; i<b.length(); i++) {
brr[i+1] = b.charAt(i)-'0';
}
if(arr.length >= brr.length) {
for(int i=0; i<brr.length; i++) {
arr[arr.length-i-1] += brr[brr.length-i-1];
}
for(int i=0; i<arr.length; i++) {
if(arr[arr.length-i-1] > 9) {
arr[arr.length-i-1] -= 10;
arr[arr.length-i-2] += 1;
}
}
answer = Arrays.stream(arr)
.mapToObj(String::valueOf)
.collect(Collectors.joining());
} else {
for(int i=0; i<arr.length; i++) {
brr[brr.length-i-1] += arr[arr.length-i-1];
}
for(int i=0; i<brr.length; i++) {
if(brr[brr.length-i-1] > 9) {
brr[brr.length-i-1] -= 10;
brr[brr.length-i-2] += 1;
}
}
answer = Arrays.stream(brr)
.mapToObj(String::valueOf)
.collect(Collectors.joining());
}
if(answer.charAt(0) == '0') answer = answer.substring(1);
return answer;
}
}
근데 for loop를 너무 많이 사용하기도 했고, 불필요하게 길어서 좀 줄여야하지 싶다.
타인의 풀이중에서는 BigInteger 라는 큰 정수를 넣는 타입을 사용한 것도 있더라... 알아보니 문자열 형태로 숫자를 처리해서 가능하다고... (힙 영역에 저장되는 모양) 신긔..