https://programmers.co.kr/learn/courses/30/lessons/12921

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ†Œμˆ˜ μ°ΎκΈ° | ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

1λΆ€ν„° μž…λ ₯받은 숫자 n 사이에 μžˆλŠ” μ†Œμˆ˜μ˜ 개수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 λ§Œλ“€μ–΄ λ³΄μ„Έμš”. μ†Œμˆ˜λŠ” 1κ³Ό 자기 μžμ‹ μœΌλ‘œλ§Œ λ‚˜λˆ„μ–΄μ§€λŠ” 수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. (1은 μ†Œμˆ˜κ°€ μ•„λ‹™λ‹ˆλ‹€.) μ œν•œ 쑰건 n은 2이상 1000000μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€. μž…μΆœλ ₯ 예 n result 10 4 5 3 μž…μΆœλ ₯ 예 μ„€λͺ… μž…μΆœλ ₯ 예 #1 1λΆ€ν„° 10 μ‚¬μ΄μ˜ μ†Œμˆ˜λŠ” [2,3,5,7] 4κ°œκ°€ μ‘΄μž¬ν•˜λ―€λ‘œ 4λ₯Ό λ°˜ν™˜ μž…μΆœλ ₯ 예 #2 1λΆ€ν„° 5 μ‚¬μ΄μ˜ μ†Œμˆ˜λŠ” [2,3,5] 3κ°œκ°€ 쑴재

programmers.co.kr

 

<μ†Œμˆ˜ μ°ΎκΈ° >

 

 

 

β—‹ 처음 ν‘Ό 풀이

λ³€μˆ˜ 2개 μ‚¬μš©ν•œ 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
  public int solution(int n) {
      int answer = 0;
      int count =0;//μ†Œμˆ˜νŒλ³„ λ³€μˆ˜
      int  primeNum=1;//μ†Œμˆ˜κ°œμˆ˜ λ°˜ν™˜λ³€μˆ˜
     
      for(int i=3; i<=n;i++){//3λΆ€ν„° nκΉŒμ§€
         for(int j=2; j<i; j++){
              if(i%j==0)
                  count++;
 
          }
          if(count==0)
                  primeNum++;
          count=0;
      }
           return answer=primeNum;
  }
}
 

 

β—‹ λ³€μˆ˜ ν•˜λ‚˜ μ‚¬μš©ν•œ 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
  public int solution(int n) {
      int answer = 1;
      int count =0;//μ†Œμˆ˜νŒλ³„ λ³€μˆ˜
     
      for(int i=3; i<=n;i++){//3λΆ€ν„° nκΉŒμ§€
         for(int j=2; j<i; j++){
              if(i%j==0)
                  count++;
            }
          if(count==0)
                answer++;
          count=0;
      }
           return answer;
  }
}
 
cs

- μ΄λ ‡κ²Œ ν‘Έλ‹ˆκΉ νš¨μœ¨μ„± κ²€μ‚¬λž‘ ν…ŒμŠ€νŠΈ 10, 11이 μ‹œκ°„μ΄ˆκ³Όλ‘œ μ•ˆλœλ‹€

- μ—λΌν† μŠ€ν…Œλ„€μŠ€ 체? λ₯Ό μ‚¬μš©ν•˜λΌλŠ”λ° 잘 λͺ¨λ₯΄κ² λ‹€ λ‹€μ‹œ 풀어봐야겠닀.

 

 

β—‹ μ—λΌν† μŠ€ν…Œλ„€μŠ€ 체λ₯Ό μ΄μš©ν•œ 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
  public int solution(int n) {
      int answer = 0;
      boolean[] sosu =new boolean [n+1];
      
      for(int i=2; i<=n ; i++)
          sosu[i]=true;
       //μ—λΌν…Œλ„€μŠ€   
      int root=(int)Math.sqrt(n);
      
     for(int i=2; i<=root; i++){
         if(sosu[i]==true){
             for(int j=i; i*j<=n; j++)
                    sosu[i*j]=false;
         }      
     }
      for(int i =2; i<=n; i++)  { 
          if(sosu[i]==true)
          answer++;
      }
      return answer;
  }
}
      
cs

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 아이디어

1. μžμ‹ μ˜ κ°’μ˜ 루트 값을  κ΅¬ν•œλ‹€. 

2. 2λΆ€ν„° 루트 κ°’μ‚¬μ΄μ˜ μˆ˜λ“€μ˜ λ°°μˆ˜λ“€μ„ λ‹€ μ—†μ•€λ‹€

3. 그리고 λ‚˜λ¨Έμ§€λŠ” μ†Œμˆ˜μ΄λ‹€.

 

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

+ Recent posts