코딩테스트/알고리즘..을 하고 싶었던

[JAVA] 백준2588: 곱셈

여파고 2024. 11. 4. 14:32

 

이 문제의 핵심은, 두번째 주어지는 정수를 분리해낼 수 있느냐...? 하는 것이다.

아 여러가지 방법이 있을 것 같지만 나는 일단 int로 정수를 받으면 아주 귀찮아질 것 같다는 확신이 강하게 들었다.

그래서 아예 두번째 수는 String으로 받기로 했다.

그리고 그 문자열을 charAt()을 이용해서 잘라낸 다음 계산하면 아주 간단하게 풀 수 있다.

 

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        String b = sc.next();
        System.out.println(a * (b.charAt(2)-'0'));
        System.out.println(a * (b.charAt(1)-'0'));
        System.out.println(a * (b.charAt(0)-'0'));
        System.out.println(a * (Integer.parseInt(b)));
        
        sc.close();
    }
}

 

첫번째 줄엔 a x b의 일의 자리,

두번째 줄엔 a x b의 십의 자리,

세번째 줄엔 a x b의 백의 자리,

네번째 줄엔 a x b를 출력하면 된다.

변수 b는 문자열이기 때문에 charAt()으로 잘라낼 수 있지만, 그 경우에 잘려진 조각은 겉보기엔 정수 같을지 모르나 사실 문자이다. 그래서 아스키 코드를 감안해서 생각을 해야한다.

 

아스키코드를 바탕으로 '1'은 49이다. '0'은 48이다.

아스키 코드를 다 외우진 못하지만 이런건 알고 있어야... '1'이 49, 'A'가 65, 'a'가 97 요정도...?

 

아무튼 그럼 문자 '1'을 정수 1로 만들고 싶으면...?

'1' - '0' 을 하게 되면 49 - 48이 됨으로 1이 나온다.

즉 문자에다가 -'0'을 하면 정수로 만들어버릴 수 있다. 

 

하하 잘 아는척 하고 썼지만 사실 몰랐다...

반응형