본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로컴퓨터 과학 › 알고리즘 › 코딩 테스트

[BaekJoon-10824] 네 수

목차

[BaekJoon-10824] 네 수

문제

네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.

두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다.

입력

첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)

출력

A와 B를 붙인 수와 C와 D를 붙인 수의 합을 출력한다.

예제 입력 1

10 20 30 40

예제 출력 1

4060

숫자 계산보다 먼저 붙이기

10 20 30 40에서는 10+20과 30+40을 계산하는 문제가 아니다. 자릿수를 붙여 1020 + 3040 = 4060을 계산한다. 덧셈 전에 문자열을 연결하면 B나 D의 자릿수를 직접 계산할 필요가 없다. 입력 범위에서 한 수는 최대 7자리이므로 연결한 수는 최대 14자리다. int는 넘을 수 있어 long으로 파싱한다.

첫 코드는 split[0] + split[1]로 두 문자열을 이어 붙인 뒤 Long.parseLong으로 수로 바꾼다. 두 번째 코드는 파싱을 직접 풀어 쓴 연습이다. 오른쪽 끝부터 읽으며 일의 자리에는 1, 십의 자리에는 10, 그다음에는 100을 곱한다. 2030은 0×1 + 3×10 + 0×100 + 2×1000이다. 실제 풀이에는 표준 파서를 쓰는 쪽이 간결하다.

입력 네 수의 전체 자릿수를 K라고 하면 문자열 연결·파싱은 O(K), 연결 문자열 때문에 추가 공간 O(K)다. 1 1 1 1은 11+11=22이고, 1000000이 들어간 경우는 int 오버플로를 점검하기 좋다.

소스코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    public static void main(String[] args) throws Exception {
        solve();
    }
    public static void solve() throws Exception {
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str = in.readLine();
        String[] split = str.split(" ");
        long num1 = Long.parseLong(split[0] + split[1]);
        long num2 = Long.parseLong(split[2] + split[3]);
        out.write(num1+num2+"\n");
        out.flush();
        out.close();;
        in.close();
    }
}

같은 변환을 직접 구현하면 다음과 같다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    public static void main(String[] args) throws Exception {
        solve2();
    }


    public static void solve2() throws Exception {
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String str = in.readLine();
        String[] split = str.split(" ");
        long num1 = parseLong(split[0] + split[1]);
        long num2 = parseLong(split[2] + split[3]);
        out.write(num1+num2+"\n");
        out.flush();
        out.close();;
        in.close();
    }
    public static long parseLong(String str) {
        char[]  chs = str.toCharArray();
        int length = chs.length;
        long exp = 1;
        long result = 0;
        int i = length -1;
        while (i != -1) {
            result += (chs[i--] - '0') * exp;
            exp *= 10;
        }
        return result;
    }
}

문제 사이트 : https://www.acmicpc.net/problem/10824

같은 카테고리의 글