새소식

algorithm/문제풀이

[프로그래머스] 점 찍기

  • -

프로그래머스 : 점 찍기 (Java)

문제

링크 확인

풀이

입력되는 정수 k, d에 대하여 조건을 만족하는 (x, y) 좌표를 찾아야 한다.
문제에서 조건은 다음과 같다.

  • 원점(0, 0)과의 거리가 d를 넘지 않아야 한다.
  • 좌표의 x, y 값은 k의 배수이다.

기본적으로 원점과 x=0 일 때 y 좌표값, y=0 일 때 x 좌표값들의 개수를 추가해둔다.
코드로 나타내면 아래와 같다.

long answer = 1; // 원점 1개
// d : 최대 거리
// d를 k로 나눈 값에 2를 곱해주면,
// x=0 일 때, y=0 일 때의 좌표값들의 개수이다.
answer += ((d / k) * 2);

이제 x, y가 0이 아닐 때 좌표 조합을 구해야 한다.
(x, y) 좌표와 원점과의 거리가 d를 넘지 않아야 하므로 거리 구하는 공식을 이용하여 d^2 >= x^2 + y^2을 만족하는 x, y 조합을 찾아야 한다.

xy 중 하나를 기준으로 좌표 값을 증가시켜가면서 최대거리 d가 되는 나머지 좌표값을 구하고, 이를 k로 나눠주면 최대거리 d를 넘지 않는 기준 좌표의 짝 좌표값 개수를 알 수 있다.
이 짝 좌표값들은 0을 포함하지 않는다.

코드

Java로 작성한 전체 코드는 다음과 같다.

class Solution {
    public long solution(int k, int d) {
        long answer = 1;
        answer += ((d / k) * 2);

        double pow = Math.pow(d, 2);
        for (int i = 1; i * k <= d; i++) {
            int num = i * k;
            answer += (int) Math.sqrt(pow - Math.pow(num, 2)) / k;
        }

        return answer;
    }
}

'algorithm > 문제풀이' 카테고리의 다른 글

[프로그래머스] 부대복귀  (1) 2022.12.11
[프로그래머스] 디펜스 게임  (0) 2022.12.10
백준 2512번 : 예산  (0) 2022.12.04
백준 1654번 : 랜선 자르기  (0) 2022.12.04
백준 2805번 : 나무 자르기  (0) 2022.12.04
[프로그래머스] 점 찍기

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.