백준|2757번|엑셀

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
67/136

문제설명
엑셀 스프레드시트의 행번호와 열번호를 입력받고 엑셀식 표기법으로 출력하는 문제입니다.

작동 순서
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문제인데도 오랜시간이 걸려서 겨우 풀었습니다. 푼 사람들 자체가 많지 않은 문제이던데 잘 보지 못한 유형이라서 많이 난해하긴 했습니다. 사실 제가 적어놓은 작동순서도 정확한지는 모르겠습니다. 계속해서 공부해나가면서 새로운 유형들을 접해봐야할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글