반응형
https://programmers.co.kr/learn/courses/30/lessons/42747
[ 코드 ]
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for (int i = 0; i < citations.length; i++) {
int h = citations.length - i;
if (citations[i] >= h) {
answer = h;
break;
}
}
return answer;
}
}
출처 : https://ju-nam2.tistory.com/74
처음에 경우의 수를 4가지로 나눠서
길이가 짝수일 때와 홀수일때,
또 그 안에서 가운데거가 길이보다 클 때 작을 때를 나눠 계산했는데
사실 그럴 필요가 없었다...!
가운데를 기준으로 하는 것이 아니라 최대의 길이일 때를 기준으로 하여 찾아내면 되었다.
[ 고수의 코드 ]
import java.util.*;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
int max = 0;
for(int i = citations.length-1; i > -1; i--){
int min = (int)Math.min(citations[i], citations.length - i);
if(max < min) max = min;
}
return max;
}
}
나도 생각을 하다 하다 거리와 해당 들어있는 배열 중 더 작은 것으로 하면 되겠다 까지는 생각해냈는데
그걸 공식으로 만든 것이 고수의 코드이다.
보실 분들은 참고하셔서 도움이 되었으면 한다.
[ 틀린 코드 ]
class Solution{
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
int n = citations.length/2;
int i = citations[n]; // 논문 위치
int j = n; // 논문 갯수
if(citations.length%2==0) {
if(citations[n]<=n) {
while(i<=j) {
i++;
j--;
}
answer = i;
}else {
while(i<=j) {
i--;
j++;
}
answer = i;
}
}else {
if(citations[n]<=n+1) {
while(i<=j+1) {
i++;
j--;
}
answer = i;
}else {
while(i<=j+1) {
i--;
j++;
}
answer = i;
}
}
return answer;
}
}
너무 복잡하게 생각하였다
※ 오늘의 교훈
최대라고 하면 최대부터 생각을! 단순하게 수학 문제를 풀 때도 있어야한다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 / java (0) | 2021.07.07 |
---|---|
[프로그래머스] 위장 / java (0) | 2021.07.01 |
[프로그래머스] 여행경로 / java (0) | 2021.06.13 |
[프로그래머스] 멀쩡한 사각형 / c++ (0) | 2020.05.28 |
[프로그래머스] 프린터 / c++ (0) | 2020.05.23 |