티스토리 뷰


1. Java 구현

            
import java.io.*;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        String a = br.readLine();
        char op = br.readLine().charAt(0);
        String b = br.readLine();

        if(a.length() < b.length()) {
            String temp = a;
            a = b;
            b = temp;
        }

        sb.append(a);
        if(op == '*')
            for (int i = 0; i < b.length() - 1; i++)
                sb.append("0");
        else
            if(a.length() == b.length())
                sb.setCharAt(0, '2');
            else
                sb.setCharAt(a.length() - b.length(), '1');
            
        System.out.println(sb.toString());
    }
}


2. 코드설명

 이 문제에서 입력값은 10^100 까지 가능하기 때문에 숫자형으로는 계산을 할 수 없다. 물론 BigInteger는 가능하겠지만, 이처럼 터무니 없이 큰 숫자들은 문자열로 

 조작하라는 문제이다. String 클래스가 가지고 있는 메소드로도 풀이가 가능했지만, StringBuilder를 사용했다. String은 immutable이기 때문에 문자열을 결합할 때마다 

 새로운 문자열을 계속 만들어야 한다. 그래서 StringBuilder가 좋다! 나의 풀이법에서는 무조건 처음에 입력받는 문자열의 자릿수가 더 크다는 가정하에 풀어야 하기 때문에 

 swap을 해야한다. 연산이 곱하기 일때는 (b의 자릿수 -  1) 만큼 0을 붙이고, 연산이 더하기 일때는 a의 특정 자릿수를 1로 바꾸었다. 여기서 특정 자릿수라는 것은 b의 자릿수에 

 해당하는 위치이다. 마지막으로, 한가지 예외처리가 필요하다. a와 b의 자릿수가 같을 때 더하기 연산을 할 경우가 있다.


3. Pain Point

 StringBuilder().setCharAt()을 활용하면 해당 인덱스의 문자열을 변경할 수 있다. 이 메소드를 알았기 때문에 쉽게 풀수 있었다. 이 방법을 몰랐다면 substring으로 문자열을 

 두개로 나눈 다음에 그 두 문자열을 결합하는 방식으로 풀어야할 것 같다. 그것보다는 전자의 방법이 좋은 것 같다!

 카페에서 공부하다가 알고리즘을 풀어야할 필요가 있어서 어떤 문제를 풀까 고민을 했는데... 이 문제가 보였다. 문제명과 카페의 상황이 너무 흡사해서 이 문제를 골랐다.

 아이가 너무 떠든다.. 아니다.. 소리를 지른다... 머라이어캐리인줄 알았다. 고음이 남다르다..


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함