programming

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


by Kitle · 2017. 06. 08.



엑셀과 같은 스프레드시트에서, 컬럼 이름은 첫번째가 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 배열삽입