콜라츠 추측(짝수면 / 2 홀수면 3n + 1로 최종값은 결국 1이 됨)
"""
입출력 예
n result
10 [10, 5, 16, 8, 4, 2, 1]
"""
def solution(n):
answer = [n]
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
answer.append(n)
return answer
주사위 문제 (총 4개의 주사위를 굴려서 값이 4개 혹은 3개 혹은 2개씩 같은 경우)
def solution(a, b, c, d):
# 주어진 주사위 숫자들을 정렬하여 작은 숫자부터 처리하기 위해 준비합니다.
dice = sorted([a, b, c, d])
# 모든 주사위의 숫자가 동일한 경우
if dice[0] == dice[3]:
return 1111 * dice[0]
# 세 개의 주사위가 동일한 숫자를 가지고 하나의 주사위가 다른 숫자를 가지는 경우
if dice[0] == dice[2] or dice[1] == dice[3]:
if dice[0] == dice[2]:
return (10 * dice[0] + dice[3]) ** 2
else:
return (10 * dice[3] + dice[0]) ** 2
# 두 개의 주사위가 동일한 숫자를 가지는 경우
if dice[0] == dice[1] and dice[2] == dice[3]:
return (dice[0] + dice[3]) * abs(dice[0] - dice[3])
# 두 주사위가 같고 나머지 두 주사위는 각각 다른 숫자가 나온경우
if dice[0] == dice[1] != dice[2] != dice[3]:
return dice[2] * dice[3]
if dice[0] != dice[3]:
return dice[0]
# 위의 코드는 테스트 케이스를 통과 못함
# 아래의 코드는 참고 테스트 케이스 통과 x
def solution(a, b, c, d):
dice = [a, b, c, d] # 주사위 숫자를 리스트로 저장합니다.
dice_set = set(dice) # 주사위 숫자의 집합을 구합니다.
if len(dice_set) == 1:
# 모든 주사위의 숫자가 동일한 경우
# set은 중복을 허용하지 않기 때문에 같은 숫자가 4개라면 오직 1개만 남는다.
return 1111 * a
elif len(dice_set) == 2:
if dice.count(a) == 3 or dice.count(b) == 3:
# 세 개의 주사위의 숫자가 같고, 나머지 하나의 숫자가 다른 경우
return (10 * a + b) ** 2
else:
# 두 개의 주사위의 숫자가 같고, 나머지 두 개의 숫자가 다른 경우
p = dice[0] # 두 개의 숫자 중 하나를 선택합니다.
q = dice[2] # 다른 하나의 숫자를 선택합니다.
return (p + q) * abs(p - q)
elif len(dice_set) == 3:
# 어떤 두 개의 주사위의 숫자가 같고, 다른 두 개의 숫자가 다른 경우
p = dice[0] # 두 개의 숫자 중 하나를 선택합니다.
q = dice[1] if dice.count(dice[1]) == 2 else dice[3] # 다른 하나의 숫자를 선택합니다.
return q * dice[dice.index(dice_set.difference({p, q}).pop())]
else:
# 네 개의 주사위의 숫자가 모두 다른 경우
return min(dice)
# 아래의 코드가 모범답안
def solution(a, b, c, d):
nums = [a, b, c, d]
counts = [nums.count(i) for i in nums]
if max(counts) == 4:
return a * 1111
elif max(counts) == 3:
p = nums[counts.index(3)]
q = nums[counts.index(1)]
return (10 * p + q) ** 2
elif max(counts) == 2:
if min(counts) == 2:
return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b)
else:
p = nums[counts.index(2)]
return (a * b * c * d) / p**2
else:
return min(nums)
'자료구조 & 알고리즘' 카테고리의 다른 글
Tool Box 2 (0) | 2023.05.16 |
---|---|
Tool Box (0) | 2023.04.26 |
자료구조 : 큐 (Quene) (0) | 2021.12.22 |
자료구조 : 배열(Array) (0) | 2021.12.21 |
컴퓨터 메모리의 간략한 개념과 선형 데이터 구조의 개념 (0) | 2021.12.21 |