입력된 정수 자료형의 숫자를 거꾸로 반환하는 문제입니다. 예를 들어, 12345 입력 -> 54321 출력이 되게 합니다. 단, 100 입력 -> 001이지만 1로 출력되어야 하며, 음수는 앞에 마이너스를 붙여야 합니다.
입력값 -> 반환값
12345 -> 54321
-12345 -> -54321
100 -> 1
0 -> 0
1의 자리부터 마지막 자리까지 값을 가져올 수 있도록 나머지 연산을 반복하는 while문을 작성하고, 양수와 음수 조건에 따라 나눠주기 위해 if문을 사용해서 메소드를 작성해 보았습니다. 최초 입력 값은 int num
으로, 나머지 값 저장은 int remainder
로, 거꾸로 출력된 값 저장은 int output
으로 변수를 선언했습니다.
public static void reverseNum(int num) {
int output = 0;
if (num >= 0) { //최초 값이 양수면 아래 반복문 실행
while (num > 0) {
int remainder = num % 10;
output = (output * 10) + remainder;
num /= 10;
}
System.out.println(output);
}
if (num < 0) { //최초 값이 음수면 아래 반복문 실행
num *= -1; //음수를 연산하기 전 양수로 변경
while (num > 0) {
int remainder = num % 10;
output = (output * 10) + remainder;
num /= 10;
}
System.out.println(output * -1); //다시 음수로 반환 및 출력
}
}
위 메소드는 결과 값을 출력하는 데는 문제가 없었지만, 서로 다른 if문에 동일한 내용의 while문을 사용하고 있으므로 아래처럼 수정할 수 있다는 것을 알게 됐습니다.
while문을 한 번만 작성하려면 반대의 조건을 가진 두 개의 if문을 축약해야 했고, 삼항연산자
를 사용하면 두 조건을 코드 한 줄에 담을 수 있었습니다.
- (조건) ? (참일 경우 실행할 내용) : (거짓일 경우 실행할 내용)
- (값은 음수이다) ? (참이면 최종 값에 -1을 곱하고) : (거짓이면 최종 값을 그대로 반환)
위 같은 코드를 만들기 위해 먼저 값은 음수이다
를 판별할 수 있는 boolean
자료형 변수를 선언합니다. true나 false라는 논리값을 반환해서 프로그램의 흐름을 제어하는 변수로 활용할 수 있습니다.
boolean isMinus = false;
즉, while문의 나머지 연산을 실행하기 전에 num < 0
이라는 조건에 만족하면 boolean isMinus = true
로 값을 초기화합니다. 또한 음수의 나머지 연산은 양수와 음수 모두가 될 수 있다는 점을 고려해, num * -1
을 추가해서 최초 입력된 값을 양수로 미리 변경합니다.
if (num < 0) {
isMinus = true;
num *= -1;
}
while문 전에 위 코드를 배치하면, 최초 값이 음수일 때 boolean isMinus = true
가 되고 -1을 곱한 값인 양수로 연산을 수행하게 됩니다.
이렇게 작성한 boolean 변수를 삼항연산자에 활용하면, 최종 값 출력시 값의 앞에 -
를 붙여 출력할 수 있습니다.
System.out.println(isMinus ? output * -1 : output);
최초 입력 값에서 음수를 걸러내고 양수로 변환 -> 반복문으로 거꾸로된 값을 도출 -> 음수였던 값은 양수에서 다시 음수로 변환해서 출력하는 과정으로 아래처럼 코드를 수정할 수 있었습니다.
public static void reverseNum(int num) {
int output = 0;
boolean isMinus = false;
if (num < 0) {
isMinus = true;
num *= -1;
}
while (num > 0) {
int remainder = num % 10;
num /= 10;
output = output * 10 + remainder;
}
System.out.println(isMinus ? numReverse * -1 : numReverse);
}
나머지 연산
을 활용하면 주어진 정수의 1의 자리 값을 가져올 수 있다.boolean 자료형 변수
는 주어진 조건의 유효성을 참이나 거짓으로 반환하는 특성상 프로그램의 흐름을 제어하는데 유용하다.삼항연산자
는 코드의 가독성을 해치지 않는 선에서 사용하면 코드를 간결하게 하는 장점이 있다.참고
https://itdeveloper.tistory.com/27 (boolean)
https://codevang.tistory.com/40 (삼항연산자)
https://sugoring-it.tistory.com/113 (나머지 연산자)