[코딩테스트/Python] 프로그래머스 코딩테스트 - 주사위 게임 3

2024. 10. 2. 16:19·Minding's Programming/프로그래머스 코딩테스트
728x90
반응형

문제 설명
1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.
네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

제한사항
a, b, c, d는 1 이상 6 이하의 정수입니다.


입출력 예

 

문제 풀이

import collections

def solution(a, b, c, d):
    dice = [a, b, c, d]
    c = collections.Counter(dice) # Counter 이용해 각 요소 별 데이터 수 카운트
    
    if len(c.values()) == 1: # c의 길이가 1 == 모든 요소가 같음
        return 1111 * a
    elif len(c.values()) == 4: # c의 길이가 4 == 모든 요소가 다름
        return min(dice)
    elif len(c.values()) == 3: # c의 길이가 3 == 2개는 같고 나머지 2개는 서로 다름
        key_list = list(c.keys())
        for key, value in c.items():
            if value == 2:
                key_list.remove(key)
                return key_list[0] * key_list[1]
    elif len(c.values()) == 2: # c의 길이가 2 == [2,2]이거나 [3,1]
        key_list = list(c.keys())
        for key, value in c.items():
            if value == 2:
                return (key_list[0] + key_list[1]) * abs(key_list[0] - key_list[1])
            elif value == 3:
                if key == key_list[0]:
                    return (10 * key + key_list[1]) ** 2
                else:
                    return (10 * key + key_list[0]) ** 2

Counter 기능을 이용해서 좀 간단히 처리하려고 했는데... 생각보다 하드 코딩이 되어버렸다.

 

다른 사람의 풀이

def solution(a, b, c, d):
    l = [a,b,c,d]
    c = [l.count(x) for x in l]
    if max(c) == 4:
        return 1111*a
    elif max(c) == 3:
        return (10*l[c.index(3)]+l[c.index(1)])**2
    elif max(c) == 2:
        if min(c) == 1:
            return eval('*'.join([str(l[i]) for i, x in enumerate(c) if x == 1]))
        else:
            return (max(l) + min(l)) * abs(max(l) - min(l))
    else:
        return min(l)

배열을 사용해 a,b,c,d의 인덱스에 카운트를 넣은 리스트를 활용했다. 나도 딕셔너리가 아닌 리스트 형태를 사용했더라면 오히려 간단하게 풀었을 것 같다. 문제 별로 라이브러리를 사용할까 말까를 잘 판단해야 하겠다.

728x90

'Minding's Programming > 프로그래머스 코딩테스트' 카테고리의 다른 글

[프로그래머스 코딩테스트/MySQL] 특정 물고기를 잡은 총 수 구하기  (0) 2025.01.21
[코딩테스트/Python] 프로그래머스 코딩테스트 - 문자열 압축  (0) 2024.10.04
[코딩테스트/Python] 프로그래머스 코딩테스트 - 사탕 담기  (0) 2024.09.30
[코딩테스트/Python] 프로그래머스 코딩테스트 - 운송 트럭  (1) 2024.09.30
[코딩테스트/Python] 프로그래머스 코딩테스트 - 나머지 한 점  (1) 2024.09.30
'Minding's Programming/프로그래머스 코딩테스트' 카테고리의 다른 글
  • [프로그래머스 코딩테스트/MySQL] 특정 물고기를 잡은 총 수 구하기
  • [코딩테스트/Python] 프로그래머스 코딩테스트 - 문자열 압축
  • [코딩테스트/Python] 프로그래머스 코딩테스트 - 사탕 담기
  • [코딩테스트/Python] 프로그래머스 코딩테스트 - 운송 트럭
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mlb stats api
    게임개발
    Python
    파이썬게임개발
    FastAPI
    django python
    Airflow
    야구
    메이저리그
    데이터 엔지니어
    pygame
    머신러닝
    파이게임
    파이썬
    데이터분석
    KalmanFilter
    KBO
    에어플로우
    프로그래머스
    넘파이
    코딩테스트
    칼만필터
    칼만필터는어렵지않아python
    MLB
    칼만필터는어렵지않아파이썬
    딥러닝
    django
    칼만필터는어렵지않아
    AWS
    질롱코리아
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[코딩테스트/Python] 프로그래머스 코딩테스트 - 주사위 게임 3
상단으로

티스토리툴바