Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "strconv"
- "strings"
- )
- var unit []string = []string{"조", "억", "만"}
- var unit2 []string = []string{"천", "백", "십"}
- func solution(str [][]string) []string {
- var result []string
- for i := 0; i < len(str); i++ {
- val1 := splitValue(str[i][0])
- val2 := splitValue(str[i][1])
- tmp := calc(val1, val2)
- result = append(result, stringNumToint(tmp))
- }
- return result
- }
- //숫자를 조,억,만 단위로 나눠서 슬라이스로 반환한다.
- func splitValue(num1 string) []string {
- str1 := num1
- var result []string
- for _, k := range unit {
- test1 := strings.Split(str1, k)
- // fmt.Println(test1, len(test1))
- if len(test1) != 1 {
- if test1[0] == "" {
- result = append(result, "1")
- } else {
- result = append(result, test1[0])
- }
- str1 = test1[1]
- } else if len(test1) == 1 {
- result = append(result, ",")
- str1 = test1[0]
- }
- }
- result = append(result, str1)
- return result
- }
- //int로 변환
- func changeInt(str string) int {
- str1 := str
- var result string
- if str == "," {
- return 0
- }
- for _, v := range unit2 {
- test1 := strings.Split(str1, v)
- // fmt.Println(test1)
- if len(test1) != 1 {
- result += intToStringNum(test1[0])
- str1 = test1[1]
- } else {
- result += "0"
- str1 = test1[0]
- }
- }
- if str1 == "" {
- result += "0"
- } else {
- result += intToStringNum(str1)
- }
- num, _ := strconv.Atoi(result)
- return num
- }
- func calc(str1 []string, str2 []string) []string {
- var result []string
- for i := 3; i >= 0; i-- {
- result = append(result, strconv.Itoa(changeInt(str1[i])+changeInt(str2[i])))
- // fmt.Println(result)
- }
- return result
- }
- func stringNumToint(str []string) string {
- num := 0
- var result string
- for i, v := range str {
- // fmt.Println(v, len(v))
- if num == 1 {
- value, _ := strconv.Atoi(v)
- str[i] = strconv.Itoa(value + 1)
- num = 0
- }
- if len(v) == 5 {
- str[i] = str[i][1:5]
- num = 1
- }
- }
- for i := 3; i >= 0; i-- {
- if str[i] != "0" {
- result += b(str[i], i)
- // result += (str[i])
- if i >= 1 {
- result += unit[3-i]
- }
- }
- }
- return result
- }
- func b(str string, f int) string {
- var result string
- l := 4 - len(str)
- for i, v := range str {
- if v != '0' {
- if v != '1' {
- result += stringToNum(v)
- } else {
- if i != 0 && len(str) > 1 {
- result += stringToNum(v)
- } else if i == 0 && len(str) == 1 {
- result += stringToNum(v)
- }
- }
- if i+l < 3 {
- result += unit2[i+l]
- }
- }
- }
- return result
- }
- func intToStringNum(str string) string {
- switch str {
- case "이":
- return "2"
- case "삼":
- return "3"
- case "사":
- return "4"
- case "오":
- return "5"
- case "육":
- return "6"
- case "칠":
- return "7"
- case "팔":
- return "8"
- case "구":
- return "9"
- }
- return "1"
- }
- func stringToNum(str rune) string {
- switch str {
- case '2':
- return "이"
- case '3':
- return "삼"
- case '4':
- return "사"
- case '5':
- return "오"
- case '6':
- return "육"
- case '7':
- return "칠"
- case '8':
- return "팔"
- case '9':
- return "구"
- case '1':
- return "일"
- }
- return ""
- }
- func main() {
- input := [][]string{
- {"오백삼십조칠천팔백구십만천오백삼십구", "삼조사천이만삼천구"},
- {"육십사억삼천십팔만칠천육백구", "사십삼"},
- {"구백육십조칠천억팔천백삼십이만칠천일", "사십삼조오천이백억육천구백십만일"},
- {"이천구백육십조천오백칠십만삼천구백구십", "삼천사백오십조일억이천만육백사십삼"},
- {"사십오억삼천육십만오백구십", "칠십억천이백삼십오만칠천구십이"},
- {"천백십일", "구천오백구십구"},
- {"오억사천", "백십일"},
- {"만오천사백삼십", "십구만삼천오백"},
- {"일조", "삼"},
- {"일억", "만"},
- }
- fmt.Println(solution(input))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement