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의 자리를 구하는 알고리즘을 알아보았다.
끝!