본문 바로가기
PS/BOJ

[자바] 백준 23813 - 회전 (java)

by Nahwasa 2023. 4. 3.

목차

    문제 : boj23813

     

     

    필요 알고리즘

    • 구현, 문자열, 수학
      • 문자열로 문제에서 제시된대로 구현해주는 문제이다.

    ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.

     

     

    풀이

      문제 제한이 짧아서 그냥 문자열 자체로 자르고 붙이고 Integer.parseInt로 정수로 변경해주면서 구현해도 상관없다. 내 경우엔 숫자로 바꿔서 계산했다. 우선 mult는 입력으로 들어온 숫자의 자리수-1 만큼 0이 붙은 숫자이다. 예를들어 "12345"라면 mult=10000 이다.

     

      그럼 N의 회전은 N/10 + N%10 * mult 로 가능하다. N/10 : 1의 자리수를 없앰, N%10 * mult : 1의 자리수를 맨 왼쪽으로 옮김. 그렇게 회전한 수가 N과 동일하지 않은 동안 더해주면 된다.

     

     

    코드 : github

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
        public static void main(String[] args) throws Exception {
            new Main().solution();
        }
    
        private void solution() throws Exception {
            String str = br.readLine();
            int mult = 1;
            for (int i = 0; i < str.length()-1; i++) {
                mult *= 10;
            }
            int n = Integer.parseInt(str);
    
            long sum = 0;
            int next = n;
            do {
                sum += next;
                next = next/10 + next%10*mult;
            } while (next != n);
    
            System.out.println(sum);
        }
    }

     

    댓글