문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
개념
조건문
실행 결과
구현 코드(javascript)
function solution(a, b, c, d) {
let count = Array(7).fill(0); // 눈금을 카운트하기 위한 배열 (1~6 사용)
count[a]++;
count[b]++;
count[c]++;
count[d]++;
let score = 0;
// 4개 모두 같은 경우
if (count.includes(4)) {
score = 1111 * count.indexOf(4);
}
// 3개가 같고 나머지 1개만 다른 경우
else if (count.includes(3)) {
let p = count.indexOf(3);
let q = count.indexOf(1);
score = Math.pow(10 * p + q, 2);
}
// 두 쌍, 두쌍이 같은 경우
else if (count.filter((x) => x === 2).length === 2) {
let [p, q] = count.map((v, i) => (v === 2 ? i : 0)).filter((i) => i !== 0);
score = (p + q) * Math.abs(p - q);
}
// 한 쌍만 같고 다른 쌍은 다를 경우
else if (count.includes(2)) {
let [q, r] = count.map((v, i) => (v === 1 ? i : 0)).filter((i) => i !== 0);
score = q * r;
}
// 모두 다른 경우
else {
score = Math.min(a, b, c, d);
}
return score;
}
코드 설명
먼저 케이스를 나눠서 분류를 해야한다.
친절하게도 문제에서 케이스를 이미 나누어서 제시하고 있다.
- 모든 주사위가 같은 경우 (예: 2, 2, 2, 2)
- 세 개의 주사위가 같고 하나가 다른 경우 (예: 4, 1, 4, 4)
- 두 쌍의 주사위가 같은 경우 (예: 6, 3, 3, 6)
- 한 쌍의 주사위만 같고 나머지가 다른 경우 (예: 2, 5, 2, 6)
- 모든 주사위가 다른 경우 (예: 6, 4, 2, 5)
위 케이스에 맞게 조건문을 세우고 자바스크립트 문법을 적절히 활용해야 한다.
처음에는 무식하게 조건문을 쓰다가 너무 길어져서 당황했다.
다시 생각해보니 1~6이 몇 번 나왔는지 카운트해서, 그 카운트를 써먹으면 되는 문제였다.
indexOf로 카운트된 주사위 넘버를 찾고 한 쌍의 페어가 존재하는 경우, 나머지 2개가 같은지 다른지를 비교해서 p,q,r을 적절히 구조분해할당한다.
하지만 다른 사람의 풀이를 보니 아래 코드가 더 좋은것 같다..😭
기본적으로 어차피 a, b, c, d 4개밖에 필요 없어서 문제를 해결하는데에는 내 코드처럼 변수를 굳이 많이 만들 필요는 없었다..ㅎ 자바스크립트 공부하는 셈치고 둘 다 숙지해야겠다.
function solution(a, b, c, d) {
if (a === b && a === c && a === d) return 1111 * a
if (a === b && a === c) return (10 * a + d) ** 2
if (a === b && a === d) return (10 * a + c) ** 2
if (a === c && a === d) return (10 * a + b) ** 2
if (b === c && b === d) return (10 * b + a) ** 2
if (a === b && c === d) return (a + c) * Math.abs(a - c)
if (a === c && b === d) return (a + b) * Math.abs(a - b)
if (a === d && b === c) return (a + b) * Math.abs(a - b)
if (a === b) return c * d
if (a === c) return b * d
if (a === d) return b * c
if (b === c) return a * d
if (b === d) return a * c
if (c === d) return a * b
return Math.min(a, b, c, d)
}
'PS' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (0) | 2024.10.12 |
---|---|
[프로그래머스] 문자열 여러 번 뒤집기 (0) | 2024.10.10 |
[백준] 10830번: 행렬 제곱 (0) | 2024.10.08 |
[백준] 2178번: 미로 탐색 (0) | 2024.10.01 |
[코드트리] 행복한 수열의 개수 (1) | 2024.09.29 |