[Java] 입력된 정수를 거꾸로 반환하기 (% 나머지 연산자)

jina·2024년 3월 16일
0

Java

목록 보기
2/10
post-thumbnail
post-custom-banner

❔ 문제

입력된 정수 자료형의 숫자를 거꾸로 반환하는 문제입니다. 예를 들어, 12345 입력 -> 54321 출력이 되게 합니다. 단, 100 입력 -> 001이지만 1로 출력되어야 하며, 음수는 앞에 마이너스를 붙여야 합니다.

입력값 -> 반환값
12345 -> 54321
-12345 -> -54321
100 -> 1
0 -> 0

💭 풀이

접근 방법

  • 나머지 연산을 사용해서 1의 자리부터 값을 가져와 역순으로 배치할 수 있는 반복문을 작성한다.
  • 음수인 경우는 최종 값에 -1을 곱해서 음수로 표기할 수 있도록 조건을 추가한다.

코드 작성

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 (나머지 연산자)

profile
오늘의 기록은 내일의 보물
post-custom-banner

0개의 댓글