Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JDBC
- 비밀번호 재설정 API
- springboot
- api 개발
- JPQL
- 스프링 이메일 전송
- 프로그래머스
- 파이썬
- MVC
- HttpServletResponse
- swap 메모리
- JPA
- Servlet
- 저장소 이전
- 스프링부트 OpenAI API
- 페이징 정렬
- 서버 배포
- git 충돌 해결
- 값 타입
- jar빌드
- Json 객체
- Git
- Chat GPT
- 우분투
- 넘파이
- 두수의 합 자바
- MySQL
- github 복제
- 자바
- 저장소 복제
Archives
- Today
- Total
현의 개발 블로그
프로그래머스 181846 두수의 합 자바 본문
문제
입출력 예시
숫자의 범위가 크므로 각 자리수를 더해 String으로 더해줘야 한다.
풀이
public String solution(String a, String b) {
//b 길이가 더 크도록
if (a.length()>b.length()){
String tmp = a;
a = b;
b = tmp;
}
int sum = 0, carry = 0;
String answer = "";
for (int i =b.length()-1;i>=0;i--){
if (i-(b.length()-a.length())>=0){
sum = a.charAt(i-(b.length()-a.length()))+b.charAt(i)-96+carry;
} else {
sum = b.charAt(i)-48+carry;
}
carry = sum /10;
sum %= 10;
answer = String.valueOf(sum) + answer;
}
if (carry>0) //길이 같을 때 반올림
answer = String.valueOf(carry) + answer;
return answer;
}
첫 번째 조건절은 a의 길이가 b보다 클 경우 swap(a,b)를 해주는 코드이다.
b와 a 각각 끝에서부터 더해주는데, a와 b의 길이가 다르다는 것에 주의해야 한다.
초기 i가 b의 끝이라고 할 때, a의 끝은 i-(len(a)-len(b))가 된다.
더할 때 10이 넘어가면 sum은 일의 자리수가 되고 carry=1이 된다.
따라서 더할 때 a,b 각 자리수와 함께 carry를 더해준다.
'0'을 정수화하면 48이므로 48을 빼주었다.
a와 b의 길이가 같고, (a의 첫번째 자리수+ b의 첫번째 자리수>0)인 경우를 처리하기 위해 마지막 조건절을 붙였다.
다른 풀이
BigInteger를 사용하면 쉽게 풀 수 있다.
public String solution(String a, String b) {
String answer = "";
BigInteger n1 = new BigInteger(a);
BigInteger n2 = new BigInteger(b);
answer += n1.add(n2);
return answer;
}
두 BigInteger 값을 더할 때는 add를 사용한다.
'프로그래밍 언어 > 자바 문제풀이' 카테고리의 다른 글
[프로그래머스] 두 수의 연산값 비교하기 (0) | 2023.06.23 |
---|---|
[프로그래머스] 문자열 겹쳐 쓰기 자바 (0) | 2023.06.23 |
[프로그래머스] 대소문자 바꿔서 출력하기 자바 (0) | 2023.06.23 |
Comments