https://school.programmers.co.kr/learn/courses/30/lessons/181916
문제는 다음과 같다.
풀이는 다음과 같다.
사실 처음에는 return 문에 대해서 삼항연산자를 사용해서 반환을 했었다.
그러면 코드가 간결해질 수 있기 때문이다.
그러나 일부 코드에서 에러가 나고 테스트 케이스는 통과하였어도, 마지막에 제출시에 오류가 발생하였다.
코딩테스트에서는 제한된 시간안에 모든 테스트 케이스를 통과하고 점수를 얻기 위해서는
직관적인 if 문으로 케이스를 나누어서 코드가 길어지더라도 정확하게 코드를 작성하는 것이 낫다고 생각한다.
특히 실제 프로그램 개발 및 운영 업무시에도, 간결하게 작성된 삼항연산자보다 if문으로 자세하게 나와 있는
경우의수의 코드와 주석들은 빠른 이해와 코드 작성에 용이할때가 있다.
삼항연산자의 삼항연산자의 삼항연산자를 사용하는 것보다는 케이스를 나누어서 if문 코드를 작성하는것이 나을 수 있다.
import java.util.Arrays;
public class Solution {
public static int solution(int a, int b, int c, int d) {
// 배열에 주사위 눈 값 저장
int[] dice = {a, b, c, d};
// 주사위 눈 값 정렬
Arrays.sort(dice);
if (a == b && b == c && c == d && a== d ) {
// 4개 주사위가 같은 경우
return a * 1111;
} else if (
(a == b && b == c) || (a == b && b == d) || (a == c && c == d) || (b == c && c == d)) {
// 3개 주사위가 같은 경우 abc abd acd bcd
//. abc. abd acd bcd
int p = (a == b) ? a : ((a==c ) ? a : c);
int q = (a == b) ? ((a==c) ? d : c) : ((a == c) ? b : a);
return (10 * p + q) * (10 * p + q);
} else if ( (a == b && c==d ) || (b == c && a==d) || (a == c && b==d)) {
// 2개 주사위가 같은 경우
// ab , cd // ac bd. // ad bc //
int p,q;
if( (a == b && c==d ) ){
p= a;
q = c;
}else if((b == c && a==d)){
p = b;
q = a;
}else{
p = a;
q = b;
}
return (p + q) * Math.abs(p - q);
} else if ( a==b || a==c || a==d || b==c || b==d || c==d) {
// 두 쌍의 주사위가 같고 나머지가 달라야지
// ab c /d. // ac b/d. // bc. a/d // ad b/c //
if(a==b){
return c*d;
}else if(a==c){
return b*d;
}else if(a==d){
return b*c;
}else if(b==c){
return a*d;
}else if(b==d){
return a*c;
}else{
return a*b;
}
} else {
// 모든 주사위가 다른 경우
return dice[0];
}
}
}
'Main > 프로그래머스(JAVA)' 카테고리의 다른 글
[PCCP 기출문제] 1번 - 붕대감기 게임 (0) | 2023.11.27 |
---|---|
프로그래머스 - 수 조작하기 2 [Java] (0) | 2023.09.21 |
프로그래머스 - 수 조작하기 1 [JAVA] (0) | 2023.09.21 |
프로그래머스 - 마지막 두 원소 (풀이 및 해설) Java (0) | 2023.09.21 |
성분으로 구분한 아이스크림 총 주문량 - Oracle DB (0) | 2023.07.02 |