[테킷 백엔드스쿨] 2주차 목요일 TIL - 프로그래머스 코딩테스트 입문

jkeum·2023년 10월 26일
0

TECHIT-BackendSchool

목록 보기
4/50
post-thumbnail

프로그래머스 코딩테스트 입문

최대값 만들기(1)

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 배열에서의 최대값을 찾으면서 그 최대값의 인덱스를 구하기 위해 maxidx 변수를 선언해서 사용했다.
최빈값이 여러 개인 경우 -1을 리턴해야 하므로 cnt를 정렬한 후에 최대값이 여러 개인지 조건문으로 확인했다.
이 부분이 좀 맘에 들지 않는다... 다른 사람의 풀이를 보니까 로직은 비슷한데 Map을 이용해서 푼 코드가 있다.
이런 자료구조 클래스를 편하게 사용할 수 있게 연습해야 할 것 같다.
util 패키지를 많이 사용해봐야겠다.

profile
It's me, jkeum!

0개의 댓글