반응형
https://school.programmers.co.kr/learn/courses/30/lessons/140107
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 실패 코드 (시간초과) - DFS 풀이
package Programmers; import java.util.ArrayList; import java.util.List; public class 점찍기 { static int[] pm = new int[2]; static int answer = 0; public static void main(String[] args){ 점찍기 T = new 점찍기(); int k = 1; int d = 5; //원점과 거리 T.solution(k, d); } public long solution(int k, int d) { List<Integer> tempArr = new ArrayList<>(); for (int i = 0; i <= d; i++) { if(k * i > d) break; tempArr.add(k * i); } int[] myArr = new int[tempArr.size()]; for (int i = 0; i < tempArr.size(); i++) { myArr[i] = tempArr.get(i); } //myArr을 만든다. dfs(0, myArr, d); return answer; } public void dfs(int L, int[] myArr, int d){ if(L == 2){ if(calc(pm, d)){ answer++; return; }else{ return; } } for (int i = 0; i < myArr.length; i++) { pm[L] = myArr[i]; dfs(L+1, myArr, d); } } public boolean calc(int[] pm, int d){ int x = pm[0]; int y = pm[1]; double a = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); if(a <= d) return true; return false; } }
12/16 개 성공 케이스다 시간초과 남.
1. 가능한 좌표 케이스 배열로 만들어서 좌표를 pm에 다가 넣고 calc에다가 보낸다.
2. calc 에서 거리가 맞는지 확인하고 true false 로 반환.
======== 시간초과남 =============
2. 코드수정
package Programmers; public class 점찍기 { public static void main(String[] args){ 점찍기 T = new 점찍기(); int k = 2; int d = 4; //원점과 거리 T.solution(k, d); } public long solution(int k, int d) { long answer = 0; for(int i = 0; i <= d; i += k) { long dd = (long) d * d; long ii = (long) i * i; int top = (int) Math.sqrt(dd - ii); answer += (top / k) + 1; } return answer; } }
1. 원의방정식 a^2 + b^2 = c^2 활용해서 풀면된다
2. 원의방정식에 따라서 x좌표(i)와 거리값을 알면 y값(top)이 산출된다.
3. x좌표(i) 일때 나올수 있는 최대 정수 y 에다가 k배수만큼 나눠주면 찍을수 있는 좌표가 나온다.
ex). i = 2 일때 원의방정식에따라서 top(y) = 3.xxxxx 이고 최대지점은 (2, 3.xxxxx) 이므로 y가 3.xxxx 밑에있는 2의 배수지점을 모두 찾아 주면 된다.
+1 은 0 포함 해야하니까
※ 제한조건 보니 DFS로는 안풀릴거라 예상은했지만 수학적사고방식으로 푸는 학습이 더 필요할것같다.
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 귤고르기 java 정렬활용 (0) | 2023.05.03 |
---|---|
[알고리즘] 프로그래머스 -명예의전당 (Java) queue - Lv.1 (0) | 2023.05.01 |
[알고리즘] 프로그래머스 - 테이블 해시함수 Java (0) | 2023.04.28 |
[알고리즘] 프로그래머스 - 마법의엘리베이터 (0) | 2023.04.27 |
[알고리즘] 프로그래머스 - 이모티콘할인행사 (java) - dfs 탐색 (0) | 2023.04.26 |