ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด (Swift/C++)
    Algorithm 2022. 2. 1. 13:50

    ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋Š” ๊ณ ๋Œ€ ๊ทธ๋ฆฌ์Šค์˜ ์ˆ˜ํ•™์ž ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค๊ฐ€ ๋งŒ๋“ค์–ด ๋‚ธ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

    ๋งˆ์น˜ ์ฒด๋กœ ์น˜๋“ฏ์ด ์ˆ˜๋ฅผ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค๊ณ  ํ•ด์„œ ๋ถ™์—ฌ์ง„ ์ด๋ฆ„์œผ๋กœ, ์ฃผ๋กœ ๋Œ€๋Ÿ‰์˜ ์†Œ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

     

    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

     

     

    1. ํŒ๋ณ„ํ•  ์ˆซ์ž์˜ ํฌ๊ธฐ๋งŒํผ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๊ณ , ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•ด๋‹น ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.

    2. ์ˆซ์ž 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๋ก€๋Œ€๋กœ 2์˜ ๋ฐฐ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์ง„ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด ๋•Œ, ์ž๊ธฐ ์ž์‹ ์ธ 2๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

    3. ๋‹ค์Œ์€ ์ˆซ์ž 3๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๋ก€๋Œ€๋กœ 3์˜ ๋ฐฐ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์ง„ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’๋“ค์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋ฒˆ์—๋„ ์—ญ์‹œ ์ž๊ธฐ ์ž์‹ ์ธ 3์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

    4. ์ˆซ์ž 4์™€ ๊ทธ ๋ฐฐ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์ง„ ์š”์†Œ๋“ค์˜ ๊ฐ’์€ ๋ชจ๋‘ 0์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์Œ ์ˆซ์ž์ธ 5๋กœ ๊ฑด๋„ˆ๋›ด๋‹ค. 

    5. ์œ„์˜ ๊ณผ์ •์„ ํŒ๋ณ„ํ•  ์ˆซ์ž์˜ ํฌ๊ธฐ๋งŒํผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ฒฐ๊ตญ์—” ์†Œ์ˆ˜๋งŒ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.

     

     

     

    ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

     

     

    ์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ (Swift)

    var number = 1000 // ํŒ๋ณ„ํ•  ์ˆซ์ž์˜ ํฌ๊ธฐ
    var arr = Array(0...1000) // ํŒ๋ณ„ํ•  ์ˆซ์ž ํฌ๊ธฐ๋งŒํผ ๋ฐฐ์—ด ํ• ๋‹น. ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
    
    func solution() {
        arr[1] = 0 // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ์•„๋ž˜ for ๋ฌธ์„ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
        
        // ์†Œ์ˆ˜ ํŒ๋ณ„ ๊ณผ์ •. 2๋ถ€ํ„ฐ number๊นŒ์ง€ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        for i in 2...number {
            if arr[i] == 0 { // ์ด๋ฏธ ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ 0์ด๋ผ๋ฉด, ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋ž˜ ์ฝ”๋“œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
                continue
            }
            
            var index = i * 2 // ๋‹ค์Œ ๋ฐฐ์ˆ˜ ํ™•์ธํ•˜๊ธฐ
            while index <= number {
                arr[index] = 0 // ๋ฐฐ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ์š”์†Œ ๊ฐ’์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝ
                index += i // ๋‹ค์Œ ๋ฐฐ์ˆ˜ ์ธ๋ฑ์Šค ๊ตฌํ•˜๊ธฐ
            }
        }
        
        // ์†Œ์ˆ˜๋งŒ ์ถœ๋ ฅ
        for number in arr {
            if number != 0 {
                print(number, terminator: " ")
            }
        }
    }
    
    solution()

     

     

    ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋ฉด 1000๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ์†Œ์ˆ˜์ธ ์ˆซ์ž๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

     

    ๋˜๋Š” for-in stride ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    var number = 1000 // ํŒ๋ณ„ํ•  ์ˆซ์ž์˜ ํฌ๊ธฐ
    var arr = Array(0...1000) // ํŒ๋ณ„ํ•  ์ˆซ์ž ํฌ๊ธฐ๋งŒํผ ๋ฐฐ์—ด ํ• ๋‹น. ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐ’์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
    
    func solution() {
        arr[1] = 0 // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ์•„๋ž˜ for ๋ฌธ์„ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
        
        // ์†Œ์ˆ˜ ํŒ๋ณ„ ๊ณผ์ •. 2๋ถ€ํ„ฐ number๊นŒ์ง€ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        for i in 2...number {
            if arr[i] == 0 { // ์ด๋ฏธ ๋ฐฐ์—ด ์š”์†Œ๊ฐ€ 0์ด๋ผ๋ฉด, ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋ž˜ ์ฝ”๋“œ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
                continue
            }
            
            for j in stride(from: i * 2, through: number, by: i) {
                arr[j] = 0 // ๋ฐฐ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ์š”์†Œ ๊ฐ’์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€๊ฒฝ
            }
        }
        
        // ์†Œ์ˆ˜๋งŒ ์ถœ๋ ฅ
        for number in arr {
            if number != 0 {
                print(number, terminator: " ")
            }
        }
    }

     

     

    ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์ด๋ฅผ C++๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

     

    ์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ (C++ ์ฝ”๋“œ)

    int number = 1000;
    int a[1001];
    
    void solution() {
    	for (int i = 2; i <= number; i++) {
    		a[i] = i;
    	}
    	for (int i = 2; i <= number; i++) {
    		if (a[i] == 0) continue; // ์ด๋ฏธ ํŒ๋ณ„๋œ ์ˆซ์ž๋Š” ๊ฑด๋„ˆ๋›ฐ๊ธฐ
    		for (int j = i * 2; j <= number; j += i) {
    			// ํŠน์ • ์ˆซ์ž์˜ ๋ฐฐ์ˆ˜๋ถ€ํ„ฐ ํŒ๋ณ„ํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œํ•˜๊ธฐ
    			a[j] = 0;
    		}
    	}
    	for (int i = 2; i <= number; i++) {
    		if (a[i] != 0) cout << a[i] << "\n";
    	}
    }
    
    
    solution()

     

    ๋Œ“๊ธ€

Designed by Tistory.