-
[프로그래머스] 점찍기 자바 (level2)코딩테스트 2025. 5. 7. 09:42반응형
링크: https://school.programmers.co.kr/learn/courses/30/lessons/140107
문제
- k : 점 좌표의 기준 배수
- d : 원점과의 거리
- return : 찍을 수 있는 총 점의 갯수
접근
- x 좌표를 0 ~ d까지 k 간격으로 반복
- 각 x에 대해 y의 최대값을 구한다.
- 직선의 길이^2 = x^2 + y^2 = d^2 → y = sqrt(d^2 - x^2)
/** * * @param k 점 좌표의 기준 배수. * @param d 원점과의 거리 * @return 찍을 수 있는 점 갯수 */ public long solution(int k, int d) { long cnt = 0; for(int x = 0; x <= d; x += k){ // y^2 ≤ d^2 - x^2 long maxY = (long) Math.sqrt((long) d * d - (long) x * x); // 0 ~ maxY 까지 등차수열의 갯수 세는 공식 cnt += maxY / k + 1; } return cnt; }
알게된 점 & 느낀점
- 등차가 d인 수열에서 0~ x까지의 갯수 세는 공식 : x / d + 1
- 결과만 놓고 보면 참 심플해 보이는데 어떻게 이런 방법으로 접근할 수 있는지 스스로 떠올릴 수 없었다.
- 수학적인 관점에서 바라볼 수 있어야 풀 수 있었을까
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 디펜스게임 자바 (level2) (우선순위 큐 maxHeap) (0) 2025.05.06 [프로그래머스] 테이블 해시 함수 (정렬 조건 + 누적 XOR) (0) 2025.05.05 [프로그래머스] 마법의 엘리베이터 자바 (Level 2) DFS 완전탐색 (0) 2025.05.02 [프로그래머스] 이모티콘 할인행사 자바 (Level 2) DFS (0) 2025.05.01 [프로그래머스] 택배 배달과 수거하기(Level 2) greedy (0) 2025.04.30