영화감독_숌_1436번

[Python, Go] 백준 1436번 풀이

영화감독 숌

  • 숫자 6이 연속해서 3번 나타나는 수를 구하는 문제이다.

  • 666, 1666, … , 5666, 의 다음은 6660, 6661, … 이다

  • 666 부터 시작해서 수를 1씩 늘려가면서 모두 확인한다.

  • 해당 수를 string으로 바꾸고 for문을 통해 6이 나왔을때 그 다음의 수도 6인지 그리고 그 다음 숫자도 6인지 확인하는 check 변수를 사용했다.

  • 만약 check가 3이되면 해당 숫자는 6이 연속해서 3번 들어갔으므로 count를 1 증가시키고 주어진 목표만큼 count가 증가하면 종료, 출력했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
n = int(input())

name = 666
count = 0

while True:
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를 사용해도됨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"fmt"
"strconv"
)

func main() {
var n int
count := 0
name := 666
fmt.Scanf("%d", &n)

for {
if count == n {
fmt.Printf("%d", name-1)
break
} else {
check := 0
for _, k := range strconv.Itoa(name) {
v, _ := strconv.ParseInt(string(k), 10, 8)
if v == 6 {
check += 1
switch check {
case 3:
count += 1
}
} else {
check = 0
}
}
}
name += 1
}
}
  • check 값이 3인지 확인할때 if문을 사용해도 괜찮지만 switch문을 사용해보았다.

Full Code

Full Code - Python

Full Code - Go

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×