View

사실 나는 이 문제를 보고 귀찮지만 금방 풀 수 있는 문제라고 생각했다.

그냥 subString 을 쓰면 되는 문제 아닌가? 싶어 금방 풀고 제출했는데, 남들이 푼 답을 보고 이렇게 풀면 안 된다는 사실을 알아버린 것이다.

 

우선 내가 문제를 푼 방식은 이렇다.

import java.util.*;
class Main {
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        String b=sc.next();
        
        String b1=b.substring(0,1);
        String b2=b.substring(1,2);
        String b3=b.substring(2,3);
        
        int answer1;
        int answer2;
        int answer3;
        int answer4;
        
        answer1=a*(Integer.parseInt(b3));
        answer2=a*(Integer.parseInt(b2));
        answer3=a*(Integer.parseInt(b1));
        answer4=a*(Integer.parseInt(b));
        
        System.out.println(answer1);
        System.out.println(answer2);
        System.out.println(answer3);
        System.out.println(answer4);
    }
}

그냥 사용자가 입력받은 수의 100의 자리, 10의 자리, 1 의 자리를 뽑아내고, a 와 각자 곱한 후 그 결과를 도출한 것이다. 이렇게 하면 정답은 정답이므로 쉽게 풀린다. 하지만 다른 사람의 답 제출을 보고 이런 방식을 원하시는 게 아니라는 것을 깨달은 나.......

 

우선 천천히 하나씩 생각해 보자.

100의 자리, 10의 자리, 1의 자리를 구해야 하는 수를 변수 b로 선언했다고 가정하자.

 

100의 자리: b/100

10의 자리: (b%100)/10

1의 자리: b%10

 

이 공식을 이용하면 구할 수 있는데, 사실 공식만 보아서 바로 연상할 수 있었다면 나처럼 이렇게 문제를 풀었을 리 없으므로(...) 예시를 사용하여 풀이해 본다.

 

100의 자리 구하는 법

456 나누기 100 을 하면 4 가 나온다. 몫이 바로 4 가 되므로, 100 의 자리 구하는 공식은 입력받은 값에 100을 나누면 된다.

10의 자리 구하는 법

456 나누기 100 을 하면 나머지로 56 이 나온다. 여기에서 10 을 나누어 주면 몫으로 5 가 나오므로, 10의 자리 숫자를 구할 수 있다.

1의 자리 구하는 법

456 나누기 10 을 하면 몫으로는 45, 나머지로는 6이 나온다. 그러므로 나머지를 구하는 공식으로 바로 구할 수 있다.

이것으로 100의 자리, 10의 자리, 1의 자리를 구하는 알고리즘을 알아보았다.

끝!

Share Link
reply
«   2025/08   »
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