int형 배열이 주어질 때, 배열의 원소 중 두 수를 곱해서 만들 수 있는 최대값을 구해 리턴하는 문제였다.
public int solution(int[] numbers) {
Arrays.sort(numbers);
return numbers[numbers.length - 1]*numbers[numbers.length - 2];
}
분명 정렬을 할 수 있는 라이브러리가 있을 것 같아서 검색했더니 Arrays.sort()
가 있었다.
C언어로만 코딩할 때는 이런 게 귀찮았는데 Java는 이런 점에서 좋다.
int형 배열이 주어질 때, 중앙값을 구하는 문제였다.
위와 같은 방법으로 풀었다.
public int solution(int[] array) {
Arrays.sort(array);
return array[array.length/2];
}
int형 배열이 주어질 때, 최빈값을 구하는 문제였다.
만약 최빈값이 여러 개면 -1을 리턴한다.
문제를 제대로 파악하고 풀었어야 했는데 대충 이렇게 하면 되겠지~하고 풀다가 한참 고생했다.
public int solution(int[] array) {
int[] cnt = new int[1000];
for (int n : array)
cnt[n]++;
int max = 0;
int idx = 0;
for (int i = 0; i < cnt.length; i++) {
if (max < cnt[i]) {
max = cnt[i];
idx = i;
}
}
Arrays.sort(cnt);
if (cnt[cnt.length-1] == cnt[cnt.length-2])
return -1;
return idx;
}
일단 문제에서 주어진 제한사항이 배열의 원소는 0 이상 1000 미만의 값이라는 것을 이용했다.
{1,2,3,3,3,4}
이렇게 주어졌을 때, 원소의 값을 인덱스로 해서 원소가 하나 나올 때마다 그 인덱스의 값을 증가시키기 위한 int형 배열 cnt
를 선언했다.
이 경우에 cnt
배열은 {0,1,1,3,1,0,0,...,0}
이 된다.
원소의 값이 0부터 999까지 나오기 때문에 cnt
배열의 크기를 1000으로 설정했다.
그리고 최빈값이 뭔지 찾아서 그 인덱스를 알아야 하므로 cnt
배열에서의 최대값을 찾으면서 그 최대값의 인덱스를 구하기 위해 max
와 idx
변수를 선언해서 사용했다.
최빈값이 여러 개인 경우 -1을 리턴해야 하므로 cnt
를 정렬한 후에 최대값이 여러 개인지 조건문으로 확인했다.
이 부분이 좀 맘에 들지 않는다... 다른 사람의 풀이를 보니까 로직은 비슷한데 Map을 이용해서 푼 코드가 있다.
이런 자료구조 클래스를 편하게 사용할 수 있게 연습해야 할 것 같다.
util 패키지를 많이 사용해봐야겠다.