development

모 회사 입사문제 - 숫자 입력받아 엑셀 스프레드 시트 컬럼 이름 출력하기 퀴즈

엑셀과 같은 스프레드시트에서, 컬럼 이름은 첫번째가 A, 두번째가 B... 같은 식인데, #26번째인 Z 다음부터는 AA, AB,.. 처럼 됩니다. #숫자를 입력받으면 그 순서에 대응되는 엑셀 컬럼을 출력하는 프로그램을 작성하세요.
#엑셀과 같은 스프레드시트에서, 컬럼 이름은 첫번째가 A, 두번째가 B... 같은 식인데,
#26번째인 Z 다음부터는 AA, AB,.. 처럼 됩니다.
#숫자를 입력받으면 그 순서에 대응되는 엑셀 컬럼을 출력하는 프로그램을 작성하세요.
#
 
x=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]

value=[]

y=int(input("Input :"))

y=y-1 


if y < 0: 
    print("Out of range.")
elif y > 25:
    
    while y > 25:
            modtemp=y%26

            if  modtemp < 26:
                value.append(x[modtemp])

            y=(int)(y/26)-1

            if y < 26:
                value.append(x[y])

   
    value.reverse()
    print(value)
        

else: # A~Z 범위인 경우 바로 출력하고 종료
    print(x[y])
        


풀이 : 

10진수 변환 방법을 활용한다. 해당 숫자를 나누어 몫과 나머지를 활용한다.

1을 입력하면 A가 출력되어야 한다.  컴퓨터의 연산 체계에서는 0부터 시작하므로

1을 입력하면 0으로 매핑할 수 있도록 입력값을 N-1로 보정한다.

EX) 1을 입력함 -> N-1 -> 0으로 매핑. 0에는 A매핑... 이런식으로

(꼭 이 방법만 가능한 것은 아님)

나눈 값이 26보다 큰 경우는 나머지를 출력하고 반복하여 나눠준다.

목 값을 보정하기위해 중간에 N-1을 시행한다.


EX) 702 입력시,

값 701 로 보정

26으로 나눈 값 26

26으로 나눈 나머지 - 25 -> Z 배열 삽입

26으로 나눈 값 26 -1 보정 -> 25 -> Z 배열 삽입

배열 역순 출력

결과 ZZ


EX) 703 입력시

702로 보정

26으로 나눈값 27

26으로 나눈 나머지 - 0 -> A 배열 삽입

26으로 나눈 값 27 - 1 보정 -> 26

26이 범위보다 크므로 중간 몫 다시 /26

나눈 나머지 0 -> A 배열삽입

몫 0 -> 범위 내이므로 다시 A 배열삽입