๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ๋ง์…ˆ(Level 1)

by dkswnkk 2022. 2. 13.

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ๋ง์…ˆ

๋‘ ์ •์ˆ˜ left์™€ right๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. left๋ถ€ํ„ฐ right๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜๋“ค ์ค‘์—์„œ, ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ง์ˆ˜์ธ ์ˆ˜๋Š” ๋”ํ•˜๊ณ , ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ธ ์ˆ˜๋Š” ๋บ€ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ

programmers.co.kr

 

์ฝ”๋“œ

#include <string>
#include <vector>
#include <map>


using namespace std;

int solution(int left, int right) {
    int answer = 0;
    map<int,int>divisor;
    for(int i=1; i<1000; i++){	// ์•ฝ์ˆ˜์˜ ๊ฐฏ์ˆ˜ ์ฐพ๊ธฐ
        for(int k=1; k<=i; k++){
            if(i%k==0) divisor[i]++;
        }
    }
    
    for(int i=left; i<=right; i++){	// ์•ฝ์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ ํ™€์ˆ˜๋ฉด ๋นผ๊ณ , ์ง์ˆ˜๋ฉด ๋”ํ•œ๋‹ค.
        if(divisor[i]&1) answer-=i;
        else answer+=i;
    }
    return answer;
}

 

ํ’€์ด

์ƒˆ๋ฒฝ 5์‹œ 21๋ถ„. ์ž ์ด ์˜ค์ง€ ์•Š์•„์„œ ์˜ค๋žœ๋งŒ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์— ์ ‘์†ํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ ํ•˜๋‚˜๋ฅผ ์ฐพ์•„์„œ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๋Œ€ ์ž…๋ ฅ๊ฐ’์ด 1000๊นŒ์ง€๋กœ ์ž‘์€ ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— O(n^2)์œผ๋กœ ๋จผ์ € ๊ฐ ์ˆ˜๋งˆ๋‹ค ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ „๋ถ€ ์ฐพ์•„์„œ ์ €์žฅํ•œ ๋’ค ํ™€์ˆ˜๋ฉด ๋นผ๊ณ , ์ง์ˆ˜๋ฉด ๋”ํ•˜๋Š” ์‹์œผ๋กœ ํ’€์ดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€