BOJ 2757 엑셀
BOJ 2757 엑셀
https://www.acmicpc.net/problem/2757
문제
엑셀의 첫 번째 열은 A이고, 두 번째 열은 B이고, 26번째 열은 Z이다. 26번째 열 다음 열부터는 2글자를 이용한다.
예를 들어, 27번째 열은 AA이고, 28번째 열은 AB, 52번째 열은 AZ이다. 그 다음 53번째 열은 BA이며, 이와 같이 계속 열의 이름을 붙인다.
ZZ열 다음 열은 AAA가 되고, 그 다음은 AAB가 된다.
엑셀에서 행은 그냥 행 번호를 사용하면 된다.
엑셀 스프레드시트에서 각 칸은 위에서 설명한 열과 행을 합쳐서 이름을 만들 수 있다. 가장 왼쪽 위에 있는 칸은 A1이 되고, 55열 23행에 있는 칸은 BC23이 된다.
열과 행이 주어졌을 때, 그 칸의 엑셀 스프레드시트 상에서 이름을 출력하는 프로그램을 작성하시오.
입력
입력은 여러 줄이며, RnCm형태이다. n은 행 번호 (1<=n<=300000000), m은 열 번호 (1<=m<=300000000) 이다. 입력의 마지막은 n과 m이 모두 0이며, 이때는 출력하지 않고 프로그램을 종료하면 된다.
출력
각 입력을 순서대로 한 줄에 하나씩 엑셀 스프레드시트 상에서의 이름을 출력하면 된다.
예제 입력 1
R1C1 R3C1 R1C3 R299999999C26 R52C52 R53C17576 R53C17602 R0C0
예제 출력 1
A1 A3 C1 Z299999999 AZ52 YYZ53 YZZ53
코드
엑셀에서 행은 단순히 10진수 번호를 사용하기 때문에 문제가 되지 않는다.
문제는 열을 영어로 표현한다는 것인데, 알파벳은 26개의 문자로 이루어져 있으므로, 열 번호를 26진수라고 생각하고 문자로 변환할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int R;
static int C;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder answer = new StringBuilder();
String input = br.readLine();
parsing(input);
while (R != 0 && C != 0) {
String position = calculatePosition();
answer.append(position).append('\n');
input = br.readLine();
parsing(input);
}
System.out.println(answer);
}
static void parsing(String input) {
int indexC = input.indexOf('C');
R = Integer.parseInt(input.substring(1, indexC));
C = Integer.parseInt(input.substring(indexC + 1));
}
static String calculatePosition() {
StringBuilder position = new StringBuilder();
while (C > 0) {
C--;
char number = (char) ('A' + C % 26);
position.insert(0, number);
C /= 26;
}
position.append(R);
return position.toString();
}
}
This post is licensed under CC BY 4.0 by the author.