[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) }
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 |
댓글