[프로그래머스] 주사위 게임 3

2024. 10. 9. 02:35·PS

 

 


 

문제

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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번: 미로 탐색  (6) 2024.10.01
[코드트리] 행복한 수열의 개수  (1) 2024.09.29
'PS' 카테고리의 다른 글
  • [프로그래머스] 타겟 넘버
  • [프로그래머스] 문자열 여러 번 뒤집기
  • [백준] 10830번: 행렬 제곱
  • [백준] 2178번: 미로 탐색
abyss-s
abyss-s
프론트엔드 개발합니다!
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (193) N
      • Web (17) N
        • JavaScript (6)
        • TypeScript (1)
        • React (6) N
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (16)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (5)
        • Project (2)
        • Conference (1)
      • IT (3)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • Statistics (11)
      • Book (5)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    OS
    생활코딩
    통계학
    자바기반응용프로그래밍
    운영체제
    Java
    C++
    Python
    그리디
    백준
    github
    자바스크립트
    네트워크
    파이썬
    코드트리
    React
    JavaScript
    BAEKJOON
    DP
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[프로그래머스] 주사위 게임 3
상단으로

티스토리툴바