728x90
반응형
SMALL
배열의 1~6자리에 각 수자가 나올때마다 +1씩해준다.
그러면 배열의 각 자리에 숫자가 나온 빈도가 출력됨.
경우의 수
cnt는 새로운 숫자가 배열에 추가될 때마다 +1씩 해준다.
예시)
cnt가 1인경우 : 모두 같은 숫자
cnt가 2인경우 : 두개의 숫자가 들어옴
cnt의 상황에 따라 경우의 수를 추가한다.
cnt가1이면 모두 같은 숫자이므로 고려x
cnt가 2이면 두개의 상황이 주어진다.
📌3개의 같은 숫자 + 1개의 다른 숫자
📌2개의 같은 숫자 + 2개의 같은 숫자
📌또한 숫자의 대소관계를 파악해야 함
cnt가 3이면 하나의 상황
3개의 같은 숫자와 1개의 다른 숫자
cnt가 4이면 하나의 상황
가장작은 숫자를 찾아서 출력한다.
class Solution {
public int solution(int a, int b, int c, int d) {
int[] arr = {a,b,c,d};
int result= 0;
int cnt =0;
int[] stack = new int[7];
for(int i=0; i< arr.length;i++) {
int pushNum= arr[i];
if(stack[pushNum]==0) {
cnt++;
stack[pushNum]++;
}
else stack[pushNum]++;
}
//System.out.println("cnt:"+cnt);
//System.out.println("stack배열 : "+Arrays.toString(stack));
//1. cnt가 1일때
if(cnt==1) result = 1111*a;
//2. cnt가 2일때 - 하나의 숫자 개수가 더큼
if(cnt==2) {
//flag가 true이면 하나의 개수가 3개인것으로 연산
boolean flag = false;
int max = 0;
int min=0;
for(int i=0; i<stack.length;i++) {
if(stack[i]==3) {flag=true; max=i;}
else if(stack[i]==1) min=i;
}
if(flag==true) {
int x = (10*max)+min;
result = x*x;
}
else {
max = a;
for(int i=0; i<stack.length;i++) {if(i!=max && stack[i]!=0) min=i; }
result = (max+min)*Math.abs(max-min);
}
}
//3. cnt가 3일때 - 하나의 큰 숫자를 제외하고 나머지 둘을 곱한다.
if(cnt==3) {
result=1;
for(int i=0;i<stack.length;i++) {
if(stack[i]==1) result *=i;
}
}
//4. cnt가 4일때 - 가장 작은 숫자를 골라 출력한다.
if(cnt==4) {
result=0;
int min =10;
for(int i=1; i<stack.length;i++) {
if(stack[i]!=0) {result = i<min?i:min; break;}
}
}
return result;
}
}
728x90
반응형
SMALL
'문제 풀이 > Programmers' 카테고리의 다른 글
[자바]120956 프로그래머스 옹알이 문제 코드 첨부 (1) | 2023.08.12 |
---|---|
프로그래머스42889. 실패율 자바 (0) | 2023.08.09 |
120875. 평행 (자바) 문제에 함정이 있습니다 꼭 읽어보세요! (0) | 2023.08.06 |
120866. 안전지대 자바 (2) | 2023.08.01 |
181893. 배열 조각하기 자바 (0) | 2023.07.31 |