알고리즘/프로그래머스 Level2

[프로그래머스,Java] Level2: 점 찍기

류창 2022. 12. 2. 15:25

 

문제 분석 :

 

매우 간단한 문제지만,   아이디어가 없으면 풀수 없는 문제다.

(참 이런문제가 창의력 기르기 좋은 문제인것같다.)

 

 

문제를 요약하자면,   원의 반지름을 의미하는 d 값을 주어진다.

 

원점을 기준으로 d값만큼 원을그려서, 양수의 점을 최대 몇점까지 찍을수 있는가를 구하는문제다.

 

점을찍는건 K만큼 차이가난다.

 

 

단순하게,  x좌표 길이, y좌표 길이만큼  이중 for문을 작성하여 점을찍을 수있는가를 판별할수 있다.

 

하지만 이렇게 작성하면 효울성 에러가 뜬다.

 

 

역시 최적화 과정을 거쳐야한다.

 

우리가, 점을 찍을수 있는지를 판별하는건 x^2+y^2<=d^2 이다.

 

여기서 반지름 d는 주어졋고,  우리가 x좌표만 입력하면 자동적으로 y의 최대값을 구할수있다.

 

y의 최대값을 안다면  k만큼 나누어, 점의 갯수를 확인할수있다.

 

즉, for문 한번만으로도 점의 갯수를 구할수있다.

 

 

문제 풀이:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.*;
class Solution {
    public long solution(int k, int d) {
        long answer = 0;
        
        double std= Math.pow(d,2);
        
        for(int i=0;i<=d;i+=k){
            double a=Math.pow(i,2);
            int max_Y= (int)Math.sqrt(std-a);            
            answer+=max_Y/k+1;
        }
        
        return answer;
    }
}
cs