문제 : boj8949
필요 알고리즘 개념
- 문자열. 구현
- 문자열을 파싱할 줄 알아야 풀 수 있다. 이외 로직은 문제에서 제시된 대로 구현해주면 된다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
1. 예를들어 A = "123, B = "2495" 라고 해보자. 이 때 문자열 자체로 A = "0123", B = "2495" 처럼 자리수를 동일하게 맞추기 위해 앞에 '0'을 넣어준다고 하자.
2. 그렇다면 A와 B의 길이는 동일하므로, 그냥 좌측부터 쭉 보면서 한 Character씩 빼와서 정수로 바꿔 더한 값을 계속 출력해주면 된다.
- 0 + 2 = 2
- 1 + 4 = 5
- 2 + 9 = 11
- 3 + 5 = 8
이므로 순서대로 2 5 11 8 -> 25118 이 출력된다.
그럼 이제 '1'에서 서로 길이 맞추는것만 잘 하면 된다.
gap = ||A|-|B|| 라고 해보자. ('A의 길이 - B의 길이'의 절대값)
그럼 A와 B 중 작은 쪽에 gap 횟수만큼 앞에 '0'을 붙여주면 된다.
참고로 repeat()은 자바 8에 없으므로 자바 8로 제출하려면 직접 반복문 돌려서 "0"을 앞쪽에 붙여주면 된다.
int gap = Math.abs(a.length() - b.length());
if (a.length()<b.length())
a = "0".repeat(gap) + a;
else
b = "0".repeat(gap) + b;
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
String b = st.nextToken();
int gap = Math.abs(a.length() - b.length());
if (a.length()<b.length())
a = "0".repeat(gap) + a;
else
b = "0".repeat(gap) + b;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < a.length(); i++) {
sb.append(a.charAt(i)-'0' + b.charAt(i)-'0');
}
System.out.println(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 1253 - 좋다 (java) (1) | 2022.12.02 |
---|---|
[자바] 백준 20976 - The Second Largest Integer (java) (0) | 2022.12.02 |
[자바] 백준 17071 - 숨바꼭질 5 (java) (0) | 2022.11.29 |
백준 2563 - 색종이 (자바, C, C++, node.js, Kotlin, Python, C#) (1) | 2022.11.29 |
[자바] 백준 23972 - 악마의 제안 (java) (0) | 2022.11.28 |
댓글