Algorithm/Programmers

[Programmers] 점 찍기 / ❌

cks._.hong 2024. 10. 5. 18:13

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 제출 코드 (1시간 12분 28초 / 구현)

import java.util.*;

class Solution {
    public long solution(int k, int d) {
        long answer = 0;
        for(int i = 0; i <= d; i += k) {
            answer += getCnt(getY(i, d), k);
        }
        return answer;
    }
    
    public static int getY(int x, int d) {
        return (int) Math.sqrt(Math.pow(d, 2) - Math.pow(x, 2));
    }
    
    public static int getCnt(int y, int k) {
        return (y / k) + 1;
    }
}

 

2. 구현 로직

  1. X를 K만큼 증가시키면서 주어진 D값과 피타고라스 정리를 이용해서 Y값을 구해보려고 한다.
  2. getY함수에 X와 D 값을 넣게 되면 Y값이 구해지게 되는데 Y는 D거리 안에서 최대 값이다.
  3. 이 값을 getCnt에 넣어서 K로 나누고 + 1을 하면 Y값내에 모든 Y좌표 개수를 구할 수 있다.

 

3. 유의할 점

  • 피타고라스 정리는 전혀 생각하지 못해서 수학적인 측면에서도 문제를 풀 때 고려해야 할 거 같다.