Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. )
  8.  
  9. var unit []string = []string{"조", "억", "만"}
  10. var unit2 []string = []string{"천", "백", "십"}
  11.  
  12. func solution(str [][]string) []string {
  13. var result []string
  14.  
  15. for i := 0; i < len(str); i++ {
  16. val1 := splitValue(str[i][0])
  17. val2 := splitValue(str[i][1])
  18. tmp := calc(val1, val2)
  19.  
  20. result = append(result, stringNumToint(tmp))
  21.  
  22. }
  23.  
  24. return result
  25. }
  26.  
  27. //숫자를 조,억,만 단위로 나눠서 슬라이스로 반환한다.
  28. func splitValue(num1 string) []string {
  29. str1 := num1
  30. var result []string
  31.  
  32. for _, k := range unit {
  33. test1 := strings.Split(str1, k)
  34. // fmt.Println(test1, len(test1))
  35. if len(test1) != 1 {
  36. if test1[0] == "" {
  37. result = append(result, "1")
  38. } else {
  39. result = append(result, test1[0])
  40. }
  41. str1 = test1[1]
  42. } else if len(test1) == 1 {
  43. result = append(result, ",")
  44. str1 = test1[0]
  45. }
  46. }
  47. result = append(result, str1)
  48.  
  49. return result
  50. }
  51.  
  52. //int로 변환
  53. func changeInt(str string) int {
  54. str1 := str
  55. var result string
  56. if str == "," {
  57. return 0
  58. }
  59. for _, v := range unit2 {
  60. test1 := strings.Split(str1, v)
  61. // fmt.Println(test1)
  62.  
  63. if len(test1) != 1 {
  64. result += intToStringNum(test1[0])
  65. str1 = test1[1]
  66. } else {
  67. result += "0"
  68. str1 = test1[0]
  69. }
  70. }
  71. if str1 == "" {
  72. result += "0"
  73. } else {
  74. result += intToStringNum(str1)
  75. }
  76. num, _ := strconv.Atoi(result)
  77. return num
  78. }
  79.  
  80. func calc(str1 []string, str2 []string) []string {
  81. var result []string
  82. for i := 3; i >= 0; i-- {
  83. result = append(result, strconv.Itoa(changeInt(str1[i])+changeInt(str2[i])))
  84. // fmt.Println(result)
  85. }
  86. return result
  87. }
  88.  
  89. func stringNumToint(str []string) string {
  90. num := 0
  91. var result string
  92. for i, v := range str {
  93. // fmt.Println(v, len(v))
  94. if num == 1 {
  95. value, _ := strconv.Atoi(v)
  96. str[i] = strconv.Itoa(value + 1)
  97. num = 0
  98. }
  99. if len(v) == 5 {
  100. str[i] = str[i][1:5]
  101. num = 1
  102. }
  103. }
  104.  
  105. for i := 3; i >= 0; i-- {
  106.  
  107. if str[i] != "0" {
  108. result += b(str[i], i)
  109. // result += (str[i])
  110.  
  111. if i >= 1 {
  112. result += unit[3-i]
  113. }
  114. }
  115.  
  116. }
  117.  
  118. return result
  119. }
  120.  
  121. func b(str string, f int) string {
  122. var result string
  123.  
  124. l := 4 - len(str)
  125.  
  126. for i, v := range str {
  127. if v != '0' {
  128. if v != '1' {
  129. result += stringToNum(v)
  130. } else {
  131. if i != 0 && len(str) > 1 {
  132. result += stringToNum(v)
  133. } else if i == 0 && len(str) == 1 {
  134. result += stringToNum(v)
  135. }
  136. }
  137. if i+l < 3 {
  138. result += unit2[i+l]
  139. }
  140. }
  141. }
  142. return result
  143. }
  144.  
  145. func intToStringNum(str string) string {
  146. switch str {
  147. case "이":
  148. return "2"
  149. case "삼":
  150. return "3"
  151. case "사":
  152. return "4"
  153. case "오":
  154. return "5"
  155. case "육":
  156. return "6"
  157. case "칠":
  158. return "7"
  159. case "팔":
  160. return "8"
  161. case "구":
  162. return "9"
  163. }
  164. return "1"
  165. }
  166.  
  167. func stringToNum(str rune) string {
  168. switch str {
  169. case '2':
  170. return "이"
  171. case '3':
  172. return "삼"
  173. case '4':
  174. return "사"
  175. case '5':
  176. return "오"
  177. case '6':
  178. return "육"
  179. case '7':
  180. return "칠"
  181. case '8':
  182. return "팔"
  183. case '9':
  184. return "구"
  185. case '1':
  186. return "일"
  187. }
  188. return ""
  189. }
  190.  
  191. func main() {
  192. input := [][]string{
  193. {"오백삼십조칠천팔백구십만천오백삼십구", "삼조사천이만삼천구"},
  194. {"육십사억삼천십팔만칠천육백구", "사십삼"},
  195. {"구백육십조칠천억팔천백삼십이만칠천일", "사십삼조오천이백억육천구백십만일"},
  196. {"이천구백육십조천오백칠십만삼천구백구십", "삼천사백오십조일억이천만육백사십삼"},
  197. {"사십오억삼천육십만오백구십", "칠십억천이백삼십오만칠천구십이"},
  198. {"천백십일", "구천오백구십구"},
  199. {"오억사천", "백십일"},
  200. {"만오천사백삼십", "십구만삼천오백"},
  201. {"일조", "삼"},
  202. {"일억", "만"},
  203. }
  204.  
  205. fmt.Println(solution(input))
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement