일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- Dijkstra
- 파이썬 #백준 #알고리즘 #코딩테스트
- 코딩테스트
- java #자바 #생활코딩
- css #웹 #생활코딩
- 알고리즘
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- java #자바 #동빈나
- css #생활코딩 #웹
- 파이썬
- 백트랙킹
- 다익스트라
- DFS
- 백준 #알고리즘 #파이썬 #코딩테스트
- 다이나믹프로그래밍
- BFS
- dp
- java #자바 #나동빈
- java #자바
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 백준 #파이썬 #알고리즘 #코딩테스트
- 자바 #java
- react #리액트 #동빈나
- 재귀
- 투포인터
- 백준
- react #리액트 #동빈나 #나동빈 #유튜브강의
- PYTHON
Archives
- Today
- Total
커리까지
[프로그래머스] 주사위 게임 3 파이썬 본문
728x90
SMALL
문제 설명
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 이하의 정수입니다.
입출력 예
a | b | c | d | result |
---|---|---|---|---|
2 | 2 | 2 | 2 | 2222 |
4 | 1 | 4 | 4 | 1681 |
6 | 3 | 3 | 6 | 27 |
2 | 5 | 2 | 6 | 30 |
6 | 4 | 2 | 5 | 2 |
입출력 예 설명
입출력 예 #1
- 예제 1번에서 네 주사위 숫자가 모두 2로 같으므로 1111 × 2 = 2222점을 얻습니다. 따라서 2222를 return 합니다.
입출력 예 #2
- 예제 2번에서 세 주사위에서 나온 숫자가 4로 같고 나머지 다른 주사위에서 나온 숫자가 1이므로 (10 × 4 + 1)2 = 412 = 1681점을 얻습니다. 따라서 1681을 return 합니다.
입출력 예 #3
- 예제 3번에서
a
,d
는 6으로,b
,c
는 3으로 각각 같으므로 (6 + 3) × |6 - 3| = 9 × 3 = 27점을 얻습니다. 따라서 27을 return 합니다.
입출력 예 #4
- 예제 4번에서 두 주사위에서 2가 나오고 나머지 다른 두 주사위에서 각각 5, 6이 나왔으므로 5 × 6 = 30점을 얻습니다. 따라서 30을 return 합니다.
입출력 예 #5
- 예제 5번에서 네 주사위 숫자가 모두 다르고 나온 숫자 중 가장 작은 숫자가 2이므로 2점을 얻습니다. 따라서 2를 return 합니다.
제출 답안
Counter
를 사용해서 개수를 구한다.- 기본 형태가
dict
로 되어있기에 리스트컴프리헨션을 사용하여 리스트로 변환한다. - 다시 많이 사용된 순서로 sotred한다.
- 기본 형태가
- 그 다음부터는 문제에서 제시된 조건에 맞춰 작성하면 된다.
from collections import Counter
def solution(a, b, c, d):
cnt = [(key, value) for key, value in Counter([a, b, c, d]).items()]
cnt = sorted(cnt, key=lambda x: -x[1])
if cnt[0][1] == 4:
return 1111 * a
elif cnt[0][1] == 3:
return ((10 * cnt[0][0]) + cnt[1][0]) ** 2
elif cnt[0][1] == 2:
if cnt[1][1] == 2:
return (cnt[0][0] + cnt[1][0]) * abs(cnt[0][0] - cnt[1][0])
return cnt[1][0] * cnt[2][0]
return min(a, b, c, d)
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[프로그래머스] 특이한 정렬 파이썬 (0) | 2023.11.06 |
---|---|
[프로그래머스] 다항식 더하기 파이썬 (0) | 2023.11.05 |
[프로그래머스] 안전지대 파이썬 (1) | 2023.11.02 |
[프로그래머스] 배열 만들기 2 파이썬 (0) | 2023.10.31 |
[프로그래머스] 배열 조각하기 파이썬 (0) | 2023.10.31 |
Comments