whileTrue: if count == n: print(name-1) break else: check = 0 for i in str(name): if i == "6": check += 1 if check == 3: count += 1 continue else: pass else: check = 0 name += 1
Go도 같은 방식의 풀이지만, string을 for문에 돌릴때 반환되는 값은 포인터 값이므로 string(x) 로 바꿔주는것만 주의 참조
string을 int로 바꿀때 strconv.ParseInt 를 사용했으나 strconv.Atoi를 사용해도됨
Go도 문자열을 for문에 사용할 수는 있지만, 파이썬과 달리 Go는 인덱스와 포인터 값을 반환한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package main
import"fmt"
funcmain() { str := "CAT" for _, r := range str { c := string(r) fmt.Println(c) } fmt.Println() for i, r := range str { fmt.Println(i, r, string(r)) } }
위의 코드를 실행시켜보면, 다음과 같이 출력된다. C A T
0 67 C 1 65 A 2 84 T
위와같이, Go에서는 for문에서 문자열이 아닌 포인터값(int)을 반환한다.
따라서 문자열을 이용하고 싶을 경우, 새로운 변수를 만들고 이에 string()함수를 통해 초기화 시켜주어야 한다.
위의 예처럼, 반환받은 r값을 새로운 변수 c := string(r) 로 초기화 시켜서 사용.
switch { case a > b: fmt.Println("a가 b보다 큽니다.") case a < b: fmt.Println("a가 b보다 작습니다.") case a == b: fmt.Println("a와 b가 같습니다.") default: fmt.Println("모르겠어요.") } }
for i := 1; i < n; i++ { sum := i for _, j := range strconv.Itoa(sum) { k, _ := strconv.ParseInt(string(j), 10, 8) sum += int(k) } if sum == n { fmt.Printf("%d", i) break } elseif i == n-1 { fmt.Printf("%d", 0) } } }