티스토리 뷰
-문제설명
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
-제한사항
-0 < array의 길이 < 100
-0 ≤ array의 원소 < 1000
입출력 예시
[1, 2, 3, 3, 3, 4] | 3 |
[1, 1, 2, 2] | -1 |
[1] | 1 |
쉬운 문제였는데, 처음에 생각없이 풀다가 굉장히 시간낭비를 했다.
(그렇다고 정답 코드가 최고의 답안은 아니지만..ㅠ)
처음엔 아래처럼 코드를 짰다.
class Solution {
public int solution(int[] array) {
int[] mode = new int[array.length + 1];
int modeNum = 0; //최빈수
int modeCnt = 0; //최빈수가 나온 횟수
int repeatCnt = 0;
if(array.length == 1){
modeNum = array[0];
}else{
//index는 최빈값
//index의 value는 최빈값의 횟수
for (int i = 0; i < array.length; i++){
mode[array[i]]++;
}
for (int i = 0; i < array.length; i++) {
if (modeCnt < mode[i]) {
modeCnt = mode[i];
modeNum = i;
}
}
for (int i = 0; i < array.length; i++){
if (modeCnt == mode[i]){
repeatCnt++;
}
if (repeatCnt == 2){
modeNum = -1;
}
}
}
return modeNum;
}
}
얼핏보면 될 것 같기도 한데, 중복되는 modeCnt 값을 확인하는 것도 이상하고
무엇보다도 최빈값이 들어가는 배열의 크기를 잘못 설정했다.
예를 들면 배열이 {1, 7, 7} 이런 식으로 주어졌을 때, 런타임 오류가 발생하게 되는 것이었다.
class Solution {
public int solution(int[] array) {
int arrayMaxValue = 0;
for (int i = 0; i < array.length; i++){
if (array[i] > arrayMaxValue){
arrayMaxValue = array[i];
}
}
//최대값 포함을 위해 +1
int[] countingList = new int[arrayMaxValue + 1];
int modeCnt = 0;
int modeNum = 0;
int repeatCnt = 0;
//배열의 원소가 몇 번씩 나오는지를 확인하는 배열 생성
for (int i = 0; i < array.length; i++){
countingList[array[i]]++;
}
for (int i = 0; i < countingList.length; i++){
if (modeCnt < countingList[i]){
modeCnt = countingList[i];
modeNum = i;
}
}
for (int i = 0; i < countingList.length; i++){
if (countingList[i] == modeCnt){
repeatCnt++;
}
}
if (repeatCnt > 1){
modeNum = -1;
}
return modeNum;
}
}
그래서 생각한 것은 주어진 배열에서 가장 큰 원소를 찾고, 그 원소를 기준으로 해서 배열의 크기를 잡으면 되겠다고 생각했다.
repeatCnt는 이전 방법과 비슷하지만 값이 1보다 크면 -1을 리턴하도록 했다.
최빈값이 1개이면 repeatCnt 도 1이니까!
'알고리즘 문제' 카테고리의 다른 글
[프로그래머스] 실패율 구하기 (0) | 2023.01.01 |
---|---|
[프로그래머스] 피보나치 수 (0) | 2022.12.24 |
[프로그래머스] 로또의 최고 순위와 최저 순위 자바 (0) | 2022.12.18 |
[프로그래머스] 배열자르기 (0) | 2022.11.22 |
[프로그래머스] 피자 나눠 먹기(2) (0) | 2022.11.10 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Lock
- 항해
- index
- 프로그래머스
- 자바
- bankersRounding
- jmeter부하테스트
- 대규모더미데이터
- jmeter토큰
- pessimisticlock
- 인덱스
- Spring
- CheckedException
- jmeter시나리오
- Java
- EC2
- jmeter테스트
- Redis
- 스프링faker
- Redisson
- jmeter쿠키
- 토큰
- jwt
- 동적크롤링
- jmeter세션
- hackerrank
- Python
- 부하테스트시나리오
- CorrectnessAndTheLoopInvariant
- jmeter로그인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함