Fizz Buzz 문제 해결 알고리즘의 대상 사용
11296 단어 interviewalgorithmsprogramminggo
본고의 주요 목적은 알고리즘의 다섯 가지 흔한 목표를 해석하는 것이다.
이 문서에서 나는 간단한 Fizz Buzz 알고리즘을 설명하고 Golang에서 그것을 실현할 것이다.그 밖에 나는 두 가지 방법을 사용하여 뚜렷하고 읽기 쉬운 코드를 작성하는 중요성을 설명한다.
소개하다.
알고리즘은 문제를 해결하는 수학과 계산 프로그램이다.
문제는 입력과 출력의 이원 관계다.전형적인 인코딩 도전이나 업무 면접에서 한 그룹의 입력을 하고 가능한 출력을 원한다.
알고리즘이나 계산 문제는 처리해야 할 완전한 실례 집합과 그 중의 한 실례에서 실행된 후의 출력을 설명함으로써 지정된다.
따라서 알고리즘의 첫 번째 목표는 문제 해결이다.
간단한 정렬 알고리즘으로 쉬쉬하는 소리와 윙윙거리는 소리를 해결하다
특히 데이터 구조와 알고리즘에 대한 경험이 있다면 피자 버즈 알고리즘을 들어본 적이 있을 것이다.Fizz Buzz, Fizz 또는 Fizz Buzz로 철자를 지정할 수 있습니다.네가 어느 것을 좋아하든지 간에, 이것은 여전히 기술 업무 면접에서 흔히 볼 수 있는 문제이다.
1부터 10까지의 숫자를 상상해 보세요.
x={1,2,3,4,5,6,7,8,9,10}
피자와 버즈는 각각 3과 5의 배수를 가리킨다.다시 말하면, 만약 숫자가 3으로 정제될 수 있다면, 그것은 쉬쉬로 분류된다.만약 숫자가 5로 정제될 수 있다면, 그것은 윙윙 소리로 분류된다.
fizz(x)={3,6,9}
바스(x)={5,10}
만약 숫자가 동시에 3과 5의 배수라면, 이 숫자는 '쉬쉬' 로 바뀔 것이다본질적으로, 그것은 유명한 어린이 놀이인 '
이 계산 문제를 해결하는 알고리즘을 작성할 때, 수조를 두루 훑어보고, 어떤 숫자가 쉬쉬하고, 어떤 숫자가 윙윙거리는지 검사한다.이를 위해 1-10 사이의 숫자 그룹을 순환하는
for
순환을 만듭니다.for x := 1; x <=10; x++ {
if x % 3 == 0 {
fmt.Println("Fizz", x)
} else if x % 5 == 0 {
fmt.Println("Buzz", x)
}
fmt.Println(x)
}
Go Playground에서 이 코드를 실행할 수 있습니다.출력이
그건 모자라.Fizz Buzz는 집합의 원소가 모두 fizz와 buzz의 제수인 3과 5를 가리킨다.
계산 솔루션이 알고리즘이 된 것은 대면적과 소면적의 데이터를 효과적으로 처리할 수 있기 때문이다.전문가 산법학자들은 하나의 알고리즘이 비교적 큰 데이터 집합에서 비교적 작은 데이터 집합보다 더 잘 표현되어야 한다고 논쟁할 것이다.
알고리즘의 두 번째 목표는 논증 효율이다.
<unk>거리는 소리(코드 혼란)
FizzBuzz 알고리즘은 일련의 if-else 문구로 개선될 수 있습니다: 정렬 알고리즘에 사용됩니다.그러나 더 큰 데이터 집합이 필요하다.
func main() {
for i := 1; i <= 100; i++ {
if i%3 == 0 {
if i%5 == 0 {
fmt.Println("FizzBuzz at", i)
} else {
fmt.Println("Fizz")
}
if i%5 == 0 {
fmt.Println("Buzz")
} else {
fmt.Println(i)
}
}
}
}
Go Playground에서 이 코드를 실행할 수 있습니다.너는 예상한 생산량을 볼 수 있지만, 여기에는 균형이 있다.
if
, else if
, else
문장의 삽입 코드를 작성하는 것을 피한다.<unk>거리는 소리 (깨끗한 코드로)
면접관을 곤혹스럽게 할 수 있는 플러그인 코드를 작성하는 것이 아니라
if
과 continue
를 사용하여 코드를 더욱 간결하게 만들 수 있다.func main() {
for i := 1; i <= 100; i++ {
if i%3 == 0 && i%5 == 0 {
fmt.Println("FizzBuzz at", i)
continue
}
if i%3 == 0 {
fmt.Println("Fizz")
continue
}
if i%5 == 0 {
fmt.Println("Buzz")
continue
}
fmt.Println(i)
}
}
Go Playground에서 이 코드를 실행할 수 있습니다.continue
키워드는 한 번 교체를 건너뛰고 다음 번으로 이동합니다.출력은 알고리즘의 네 번째 목표인 정확성을 증명했다.
알고리즘 사고
알고리즘의 다섯 번째도 가장 중요한 목표는 운행 시간을 정확하게 최적화하는 것이다.
데이터 세트의 범위가 1-100으로 확대됨에 따라 운행 시간을 줄이는 방법을 꼼꼼히 고려해야 합니다.
주어진 조건 하에서 컴파일러는 모든 숫자를 검사해서 그것이 3으로 나누어질 수 있는지 5로 나누어질 수 있는지 확인합니다.그 다음에, 이 숫자들이 3과 5로 나누어질 수 있는지 확인하기 위해 다시 이 숫자들을 훑어볼 것이다.코드는 기본적으로 그룹의 모든 숫자를 두 번 실행해야 한다. 코드는 먼저 3을 누르고 5를 눌러야 한다.이것은 어떤 의미에서 알고리즘의 속도나 시간 복잡도를 낮추었다.
이 과정을 가속화하기 위해서 당신은 직접 숫자를 15로 나눌 수 있습니다. 왜냐하면 가장 작은 Fizz Buzz는 fizz와 buzz의 곱셈, 즉 3 x 5=15이기 때문입니다.
func main() {
for i := 1; i <= 100; i++ {
if i%15 == 0 {
fmt.Println("FizzBuzz at ", i)
} else if i%3 == 0 {
fmt.Println("Fizz")
} else if i%5 == 0 {
fmt.Println("Buzz")
} else {
fmt.Println(i)
}
}
}
Go Playground에서 이 코드를 실행할 수 있습니다.결론
본문에서 당신은 몇 가지 개념의 정의를 이해했다.Go에서 구조를 제어하는 용례도 보았습니다.플러그인 순환이 코드를 어떻게 혼란스럽게 하는지, 그리고 이 문제를 해결하는 좋은 방법도 알고 있습니다.
더 중요한 것은 알고리즘의 다섯 가지 흔한 목표와 그 의미를 이해했다는 것이다.간단한 정렬 알고리즘을 사용하여 Fizz Buzz 문제를 해결하는 방법도 배웠습니다.
마지막으로 당신은 알고리즘 사고의 필요성과 장점, 즉 알고리즘의 운행을 어떻게 최적화하는지 이해했다.경쟁 환경에서 이것은 너에게 우위를 가져다 줄 것이다.
Reference
이 문제에 관하여(Fizz Buzz 문제 해결 알고리즘의 대상 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theghostmac/using-the-fizzbuzz-problem-to-explain-the-goals-of-algorithms-3cjh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)