본문 바로가기
PS/BOJ

[자바] 백준 8949 - 대충 더해 (java)

by Nahwasa 2022. 11. 30.

 문제 : 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();
    }
}

댓글