알고리즘/프로그래머스 2단계

프로그래머스 - 점 찍기 - C++

게임만드는학생 2024. 9. 23. 13:03

https://school.programmers.co.kr/learn/courses/30/lessons/140107

 

프로그래머스

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

programmers.co.kr

 

#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long solution(int k, int d) {
    long long answer = 0;
    
    for(int x=0;x<=d;x+=k)
    {
        int mayY = sqrt((long long)d*d - (long long)x*x);
        answer += mayY/k + 1;
    }
    return answer;
}

 

원점부터 k 간격으로 x와 y를 점 찍을 수 있는데, 원점으로의 거리가 d를 넘으면 안된다. 

이 때, 몇개의 점을 찍을 수 있는가가 문제이다. 

 

x를 0부터 시작해서 최대 d까지 k간격으로 찍으면서 이 때, 최대 y를 구해 몇개의 점이 찍히는지를 계산하는 방식으로 접근한다. 

 

mayY는 거리공식을 이용해 구한다. mayY/k를 하면 0부터 최댓값사이에 몇개가 찍힐 수 있는지를 구할 수 있다. 

이 때, 원점을 계산하기 위해서 + 1을 한다.