문제: AtCoder ABC 235 A — Rotate · English · 日本語
세 자리 십진수 ABC가 주어집니다. 여기서 A, B, C는 각각 백의 자리, 십의 자리, 일의 자리 숫자입니다. 숫자를 왼쪽으로 한 칸씩 회전해 얻는 세 수 ABC, BCA, CAB의 합을 구하면 됩니다. 회전은 숫자 세 개의 순서를 바꾸는 것이므로, 숫자가 반복되거나 0이 포함되어도 똑같이 처리합니다. 예를 들어 입력이 123이면 세 수는 123, 231, 312이고 합은 666입니다.
문자열의 각 문자를 숫자로 바꾼 뒤 각 회전의 자릿값을 계산합니다. 답은 100A + 10B + C, 100B + 10C + A, 100C + 10A + B의 합입니다. 세 자리 수의 최대값이 999이므로 합은 최대 2997이며 int로 충분합니다. 시간 복잡도와 추가 공간 복잡도는 모두 O(1)입니다.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String digits = input.readLine();
int a = digits.charAt(0) - '0';
int b = digits.charAt(1) - '0';
int c = digits.charAt(2) - '0';
int answer = (100 * a + 10 * b + c)
+ (100 * b + 10 * c + a)
+ (100 * c + 10 * a + b);
System.out.println(answer);
}
}