Go์˜ ์กฐ๊ฑด๊ณผ ๊ทธ ํŠน์ง•

๋ฃจํ”„ ๋‚ด๋ถ€์˜ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋™์ผํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

		
if a > b && c*2 > d {
	....
}
// ะธ
if a <= b  { 
  continue;
}
if c*2 > d {
 ....
}


๋ชจ๋“  ๊ฒƒ์€ "๋‡Œ ์ค€๋น„ ์šด๋™"์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค; ์ •์ˆ˜ ๋ฐฐ์—ด [-x....x]์—์„œ ๊ฐ€์žฅ ํฐ ์ง์ˆ˜์— ๋Œ€ํ•œ ์ตœ์  ๊ฒ€์ƒ‰์˜ ์˜ˆ๋ฅผ ์ œ์‹œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ์ง์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด 1์˜ ๋…ผ๋ฆฌ์  ๊ณฑ์…ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ผ๋งˆ๋‚˜ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์ด ๋‚˜์˜ฌ์ง€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค.


//ัƒ ั‡ะตั‚ะฝั‹ั… ั‡ะธัะตะป ะฟะพัะปะตะดะฝะธะน ะฑะธั‚ ะฒัะตะณะดะฐ ั€ะฐะฒะตะฝ 0
value & 1 == 0
//vs ะบะปะฐััะธั‡ะตัะบะธะน ะผะตั‚ะพะด
value % 2 == 0

Go์—์„œ์˜ ๋‚ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์€ ๊ทธ๋‹ค์ง€ ๊ด‘๋ฒ”์œ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. XNUMX๋…„ ๋ฐ˜์ด ์กฐ๊ธˆ ๋„˜์—ˆ๊ณ  ์ž์ฃผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์ˆœ์ „ํžˆ ์‹ค์šฉ์ ์ธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(์Œ, ์•„๋งˆ๋„ ๊ณ ๋ถ€ํ•˜ http ์„œ๋น„์Šค์™€ ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ ํ•˜๋‚˜๋ฅผ ์ œ์™ธํ•˜๊ณ ). ๊ทธ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. GoLand๋ฅผ ์—ด๊ณ  ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ


package main
import (
	"fmt"
	"log"
	"math"
	"math/rand"
	"time"
)
const size = 100000000 //math.MaxInt32*2
type Result struct {
	Name     string
	Duration time.Duration
	Value    int32
}

func main() {
	log.Println("initial array capacity: " + fmt.Sprint(size))
	var maxValue int32
        // ะ‘ัƒะดะตะผ ะฒะฐั€ัŒะธั€ะพะฒะฐั‚ัŒ ะดะธะฐะฟะฐะทะพะฝ ั‡ะธัะตะป ะพั‚ ะผะธะฝะธะผะฐะปัŒะฝะพะณะพ 
        // ะดะพ ะผะฐะบัะธะผะฐะปัŒะฝะพะณะพ. ะงะตะผ ะผะตะฝัŒัˆะต ะดะธะฐะฟะฐะทะพะฝ, ั‚ะตะผ ะฑะพะปัŒัˆะต 
        // ะฟั€ะพั†ะตััะพั€ะฝะพะณะพ ะฒั€ะตะผะตะฝะธ ะฑัƒะดะตั‚ ัƒั…ะพะดะธั‚ัŒ ะฝะฐ ะพะฟะตั€ะฐั†ะธัŽ 
        // ัั€ะฐะฒะฝะตะฝะธั ั‚ะตะบัƒั‰ะตะณะพ ั‡ะธัะปะฐ, ั ั€ะฐะฝะตะต ะฝะฐะนะดะตะฝะฝั‹ะผ ะธ ะฝะฐะพะฑะพั€ะพั‚
	for maxValue = 128; maxValue < math.MaxInt32/2+1; maxValue = maxValue * 2 {
		test(maxValue)
	}
}

func test(maxValue int32) {
	log.Println("max threshold: " + fmt.Sprint(maxValue))
	arr := make([]int32, size)
	for i := range arr {
		arr[i] = rand.Int31n(maxValue)
                // ะฒ ั‚ะตัั‚ะพะฒั‹ั… ะดะฐะฝะฝั‹ั… ะฝะฐะผ ะฝัƒะถะฝั‹ ะธ ะพั‚ั€ะธั†ะฐั‚ะตะปัŒะฝั‹ะต ั‡ะธัะปะฐ 
		sign := rand.Intn(2)
		if sign == 1 {
			arr[i] = -arr[i]
		}
	}

        // ะทะฐะฟัƒัะบะฐะตะผ ั‚ะตัั‚ "ะดะตะปะตะฝะธะต ั ะพัั‚ะฐั‚ะบะพะผ"
	result := maxEvenDividing("maxEvenDividing", arr)
	log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)

        // ะทะฐะฟัƒัะบะฐะตะผ ั‚ะตัั‚ "ะบะพะฝัŠัŽะฝะบั†ะธะธ"
	result = maxEvenConjunction("maxEvenConjunction", arr)
	log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)
}

func maxEvenDividing(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value > current && value%2 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

func maxEvenConjunction(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value > current && value&1 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

์ž„๊ณ„๊ฐ’์ด ๋†’์„์ˆ˜๋ก ์„ฑ๋Šฅ ๋ณ€๋™์ด ๋” ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๋น„๊ตmax threshold: 128
maxEvenDividing result: 126 duration 116.0067ms
maxEvenConjunction result: 126 duration 116.0066ms

max threshold: 16384
maxEvenDividing result: 16382 duration 115.0066ms
maxEvenConjunction result: 16382 duration 111.0064ms

......

max threshold: 8388608
maxEvenDividing result: 8388606 duration 109.0063ms
maxEvenConjunction result: 8388606 duration 109.0062ms

max threshold: 16777216
maxEvenDividing result: 16777214 duration 108.0062ms
maxEvenConjunction result: 16777214 duration 109.0062ms

max threshold: 33554432
maxEvenDividing result: 33554430 duration 114.0066ms
maxEvenConjunction result: 33554430 duration 110.0063ms

max threshold: 67108864
maxEvenDividing result: 67108860 duration 111.0064ms
maxEvenConjunction result: 67108860 duration 109.0062ms

max threshold: 134217728
maxEvenDividing result: 134217726 duration 108.0062ms
maxEvenConjunction result: 134217726 duration 109.0063ms

max threshold: 268435456
maxEvenDividing result: 268435446 duration 111.0063ms
maxEvenConjunction result: 268435446 duration 110.0063ms

์ด ๊ฒฝ์šฐ ๋‹ค์–‘ํ•œ ์ž„๊ณ„๊ฐ’์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ๊ณ  ํ”„๋กœ์„ธ์„œ ๋กœ๋“œ(i5-2540M ๋…ธํŠธ๋ถ)๋Š” ์•ฝ 20..30% ์ •๋„ ๋‹ค์–‘ํ•˜๋ฉฐ GoLand์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ‰๊ท ์ž…๋‹ˆ๋‹ค. ์•ฝ 813MB - ์ด๋Š” ๊ฒฐ๊ณผ์˜ ์‹ ๋ขฐ์„ฑ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ณ  ๊ฐ ์ž„๊ณ„๊ฐ’์— ๋Œ€ํ•ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์„œ๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ตœ์†Œํ•œ์˜ ๋น„์šฉ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์ž๋™์œผ๋กœ ์ƒํƒœ์ฒดํฌ๋ฅผ ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค

		
if value > current && value&1 == 0 {
	current = value
}

์—

		
if value <= current {
        continue;
}
if value&1 == 0 {
	current = value
}

ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ... ์•„๋ฌด๊ฒƒ๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋„ค์š” :)

์‹คํ–‰์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์€ ๋” ์ด์ƒ ๋ฐฑ๋ถ„์œจ/๋ถ„์œจ์ด ์•„๋‹ˆ๋ผ 10..15%๋กœ ๋‹ฌ๋ผ์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์‹ ์†ํ•˜๊ฒŒ 2๊ฐœ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

		
func maxEvenDividing2(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value <= current {
			continue
		}

		if value%2 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

func maxEvenConjunction2(name string, arr []int32) Result {
	start := time.Now()
	var current int32 = math.MinInt32
	for _, value := range arr {
		if value <= current {
			continue
		}
		if value&1 == 0 {
			current = value
		}
	}
	duration := time.Since(start)
	result := Result{name, duration, current}
	return result
}

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ ๊ทธ๋ฆผ์„ ์–ป์Šต๋‹ˆ๋‹ค.์ดˆ๊ธฐ ์–ด๋ ˆ์ด ์šฉ๋Ÿ‰: 100000000

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 128
maxEvenDividing ๊ฒฐ๊ณผ: 126 ์ง€์† ์‹œ๊ฐ„ 116.0066ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 126 ์ง€์† ์‹œ๊ฐ„ 79.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 126 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 126 ์ง€์† ์‹œ๊ฐ„ 83.0048ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 256
maxEvenDividing ๊ฒฐ๊ณผ: 254 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 254 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 254 ์ง€์† ์‹œ๊ฐ„ 110.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 254 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 512
maxEvenDividing ๊ฒฐ๊ณผ: 510 ์ง€์† ์‹œ๊ฐ„ 114.0066ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 510 ์ง€์† ์‹œ๊ฐ„ 80.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 510 ์ง€์† ์‹œ๊ฐ„ 110.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 510 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 1024
maxEvenDividing ๊ฒฐ๊ณผ: 1022 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 1022 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 1022 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 1022 ์ง€์† ์‹œ๊ฐ„ 81.0047ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 2048
maxEvenDividing ๊ฒฐ๊ณผ: 2046 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 2046 ์ง€์† ์‹œ๊ฐ„ 79.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 2046 ์ง€์† ์‹œ๊ฐ„ 113.0065ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 2046 ์ง€์† ์‹œ๊ฐ„ 81.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 4096
maxEvenDividing ๊ฒฐ๊ณผ: 4094 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 4094 ์ง€์† ์‹œ๊ฐ„ 80.0046ms
maxEvenConjunction ๊ฒฐ๊ณผ: 4094 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 4094 ์ง€์† ์‹œ๊ฐ„ 78.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 8192
maxEvenDividing ๊ฒฐ๊ณผ: 8190 ์ง€์† ์‹œ๊ฐ„ 107.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 8190 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 8190 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 8190 ์ง€์† ์‹œ๊ฐ„ 77.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 16384
maxEvenDividing ๊ฒฐ๊ณผ: 16382 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 16382 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 16382 ์ง€์† ์‹œ๊ฐ„ 108.0062ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 16382 ์ง€์† ์‹œ๊ฐ„ 77.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 32768
maxEvenDividing ๊ฒฐ๊ณผ: 32766 ์ง€์† ์‹œ๊ฐ„ 112.0064ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 32766 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 32766 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 32766 ์ง€์† ์‹œ๊ฐ„ 78.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 65536
maxEvenDividing ๊ฒฐ๊ณผ: 65534 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 65534 ์ง€์† ์‹œ๊ฐ„ 75.0043ms
maxEvenConjunction ๊ฒฐ๊ณผ: 65534 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 65534 ์ง€์† ์‹œ๊ฐ„ 79.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 131072
maxEvenDividing ๊ฒฐ๊ณผ: 131070 ์ง€์† ์‹œ๊ฐ„ 108.0061ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 131070 ์ง€์† ์‹œ๊ฐ„ 76.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 131070 ์ง€์† ์‹œ๊ฐ„ 110.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 131070 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 262144
maxEvenDividing ๊ฒฐ๊ณผ: 262142 ์ง€์† ์‹œ๊ฐ„ 110.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 262142 ์ง€์† ์‹œ๊ฐ„ 76.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 262142 ์ง€์† ์‹œ๊ฐ„ 107.0061ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 262142 ์ง€์† ์‹œ๊ฐ„ 78.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 524288
maxEvenDividing ๊ฒฐ๊ณผ: 524286 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 524286 ์ง€์† ์‹œ๊ฐ„ 78.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 524286 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 524286 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 1048576
maxEvenDividing ๊ฒฐ๊ณผ: 1048574 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 1048574 ์ง€์† ์‹œ๊ฐ„ 80.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 1048574 ์ง€์† ์‹œ๊ฐ„ 114.0066ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 1048574 ์ง€์† ์‹œ๊ฐ„ 78.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 2097152
maxEvenDividing ๊ฒฐ๊ณผ: 2097150 ์ง€์† ์‹œ๊ฐ„ 111.0064ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 2097150 ์ง€์† ์‹œ๊ฐ„ 79.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 2097150 ์ง€์† ์‹œ๊ฐ„ 112.0064ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 2097150 ์ง€์† ์‹œ๊ฐ„ 77.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 4194304
maxEvenDividing ๊ฒฐ๊ณผ: 4194302 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 4194302 ์ง€์† ์‹œ๊ฐ„ 78.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 4194302 ์ง€์† ์‹œ๊ฐ„ 111.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 4194302 ์ง€์† ์‹œ๊ฐ„ 77.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 8388608
maxEvenDividing ๊ฒฐ๊ณผ: 8388606 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 8388606 ์ง€์† ์‹œ๊ฐ„ 78.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 8388606 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 8388606 ์ง€์† ์‹œ๊ฐ„ 78.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 16777216
maxEvenDividing ๊ฒฐ๊ณผ: 16777214 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 16777214 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 16777214 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 16777214 ์ง€์† ์‹œ๊ฐ„ 77.0044ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 33554432
maxEvenDividing ๊ฒฐ๊ณผ: 33554430 ์ง€์† ์‹œ๊ฐ„ 113.0065ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 33554430 ์ง€์† ์‹œ๊ฐ„ 78.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 33554430 ์ง€์† ์‹œ๊ฐ„ 110.0063ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 33554430 ์ง€์† ์‹œ๊ฐ„ 80.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 67108864
maxEvenDividing ๊ฒฐ๊ณผ: 67108860 ์ง€์† ์‹œ๊ฐ„ 112.0064ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 67108860 ์ง€์† ์‹œ๊ฐ„ 77.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 67108860 ์ง€์† ์‹œ๊ฐ„ 112.0064ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 67108860 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 134217728
maxEvenDividing ๊ฒฐ๊ณผ: 134217726 ์ง€์† ์‹œ๊ฐ„ 109.0063ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 134217726 ์ง€์† ์‹œ๊ฐ„ 78.0044ms
maxEvenConjunction ๊ฒฐ๊ณผ: 134217726 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 134217726 ์ง€์† ์‹œ๊ฐ„ 81.0047ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 268435456
maxEvenDividing ๊ฒฐ๊ณผ: 268435446 ์ง€์† ์‹œ๊ฐ„ 111.0064ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 268435446 ์ง€์† ์‹œ๊ฐ„ 79.0045ms
maxEvenConjunction ๊ฒฐ๊ณผ: 268435446 ์ง€์† ์‹œ๊ฐ„ 114.0065ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 268435446 ์ง€์† ์‹œ๊ฐ„ 79.0045ms

์ตœ๋Œ€ ์ž„๊ณ„๊ฐ’: 536870912
maxEvenDividing ๊ฒฐ๊ณผ: 536870910 ์ง€์† ์‹œ๊ฐ„ 107.0062ms
maxEvenDividing2 ๊ฒฐ๊ณผ: 536870910 ์ง€์† ์‹œ๊ฐ„ 76.0043ms
maxEvenConjunction ๊ฒฐ๊ณผ: 536870910 ์ง€์† ์‹œ๊ฐ„ 109.0062ms
maxEvenConjunction2 ๊ฒฐ๊ณผ: 536870910 ์ง€์† ์‹œ๊ฐ„ 80.0046ms

Go ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•˜์ง€ ์•Š๊ณ  ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์ด false์ธ ๊ฒฝ์šฐ์—๋„ ํ•ญ์ƒ ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์„ ํ™•์ธํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์„ค๋ช…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋‚ด ๋ˆˆ์ด ํ๋ฆฟํ•ด์„œ ๋šœ๋ ทํ•œ ์‹ค์ˆ˜๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฑธ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์— ํŠน๋ณ„ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•ฉ๋ฆฌ์ ์ธ ์˜๊ฒฌ์„ ์ฃผ์‹œ๋ฉด ๊ธฐ์˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : ์˜ˆ, ์žฌ๋ฏธ์‚ผ์•„ Java 5์™€ Java 7/8์—์„œ ์œ ์‚ฌํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๊ณ  ์‹คํ–‰ ์‹œ๊ฐ„๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€