문제설명
엑셀 스프레드시트의 행번호와 열번호를 입력받고 엑셀식 표기법으로 출력하는 문제입니다.
작동 순서
1. 행번호와 열번호를 입력받습니다.
2. 입력받은 문자열을 행번호와 열번호로 분리합니다.
3. 열번호는 그냥 출력하면되므로 더 이상 건드릴 필요가 없습니다.
4. 행번호는 알파벳이 26개이므로 26진수를 생각하면 됩니다. 각 위치는 26진수의 지수이고 알파벳은 자릿값입니다.
5. 원래 26진수에서는 0부터 25까지의 숫자를 사용해야하지만 여기서는 1부터 26을 사용해야하므로 앞자리의 0을 뒷자리의 26으로 바꾸어주고 앞자리의 값이 26을 넘기면 뒷자리로 넘겨주는 연산을 앞에서부터와 뒤에서부터 총 두번을 수행합니다.
6. 각 알파벳의 위치와 자릿값이 구해지면 행이름과 열번호를 출력합니다.
소스코드
import sys
mult = [0 for i in range(7)]
while True:
R, C = map(int, sys.stdin.readline()[1:].split("C"))
if R == 0 and C == 0:
break
div = 6
while div > 0:
mult[div] = C//pow(26, div)
C -= (C//pow(26, div))*pow(26, div)
div -= 1
mult[0] = C
for i in range(5):
if mult[i] == 0 and mult[i+1] > 0:
mult[i] += 26
mult[i+1] -= 1
for i in range(6,0,-1):
if mult[i-1] == 0 and mult[i] > 0:
mult[i-1] += 26
mult[i] -= 1
for i in range(6, -1, -1):
if mult[i] != 0:
print(chr(mult[i]+64), end="")
print(R)
후기
실버3문제인데도 오랜시간이 걸려서 겨우 풀었습니다. 푼 사람들 자체가 많지 않은 문제이던데 잘 보지 못한 유형이라서 많이 난해하긴 했습니다. 사실 제가 적어놓은 작동순서도 정확한지는 모르겠습니다. 계속해서 공부해나가면서 새로운 유형들을 접해봐야할 것 같습니다.