본문 바로가기
Programming/Go

[Go] 엑셀 컬럼명 만들기.

by NAMP 2013. 11. 7.

[Go] 엑셀 컬럼명 만들기.



http://www.gonuts.kr/ 블로그에 아래와 같은 문제가 있어서 코드를 본다.


/*
엑셀과 같은 스프레드시트에서, 컬럼 이름은 첫번째가 A, 두번째가 B... 같은 식인데,
26번째인 Z 다음부터는 AA, AB,.. 처럼 됩니다.
숫자를 입력받으면 그 순서에 대응되는 엑셀 컬럼을 출력하는 프로그램을 작성하세요.
*/


계산하는 부분만 변경해서 출력해본다.

0부터 시작하도록 변경한다.



package main 

import (
	"fmt"
	"os"
	//"strconv"
)

func main() {
	
//	if len(os.Args) != 2 {
//		fmt.Println("Usage: ", os.Args[0], "number")
//		os.Exit(1)
//	}
//	
//	input := os.Args[1]
//	input_number, _ := strconv.Atoi(input)
//	if input_number < 1 {
//		fmt.Println("Error: ", input)
//		os.Exit(1)
//	}
	
	var input_number = 702
	var digit = 26
	
	column_value := make([]int, 0)
	for {
		res := input_number / digit
		mod := input_number % digit
		
		if len(column_value) == 0 {
			column_value = append(column_value, mod)
		} else {
			if mod == 0 {
				mod = digit -1 
				res = res - 1
			} else {
				mod = mod -1 
			}
			column_value = append(column_value, mod)
		} 
		
		if res == 0 {break}		
		
		input_number = res
	
	}
 
	var column_name string
	for _, v := range column_value {
		column_name += fmt.Sprintf("%c", v + 65)
	}
	
	fmt.Println(Reverse(column_name))	
	
	os.Exit(0)
}

//http://stackoverflow.com/questions/1752414/how-to-reverse-a-string-in-go
func Reverse(s string) string {
	runes := []rune(s)
	for i, j := 0, len(runes) - 1; i < j; i, j = i + 1, j - 1 {
		runes[i], runes[j] = runes[j], runes[i]
	}
	return string(runes)
}




ExcelColName.xlsx


ExcelColName.go


ExcelColName.exe




25 를 입력하면 Z 가 나온다.

26 을 입력하면 AA  가 나온다.



#계산 순서


1. 입력된 값을 26으로 나눈다. 

27 입력, 몫1, 나머지1

2.  몫을 26으로 나눈다.

몫0, 나머지 1

나머지 1에서 1을 뺀다.  1-1 = 0

나머지가 0인 경우에는, 25로 변환하고, 몫에서 1을 뺀다.



각 숫자를 알파벳으로 변환한다.

0 -> A

1 -> B

....



[EoD]















'Programming > Go' 카테고리의 다른 글

[Go] 다른 파일의 함수 호출하기.  (0) 2013.11.08
[Go] 파일 읽기  (0) 2013.11.07
[Go] Hello World 출력하기  (0) 2013.11.07
[Go] Read Input  (0) 2013.11.05
[Go] 참고사이트  (0) 2013.11.05

댓글