본문 바로가기
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);
    }
}

 

댓글