아자아자 화이팅이닷 !

231104 오프라인 스터디 & 프로그래머스 문제풀기 본문

TIL

231104 오프라인 스터디 & 프로그래머스 문제풀기

유초23 2023. 11. 4. 16:52
728x90

내가 안풀렸던 문제들을 오프라인 스터디에서 물어보았다 !

 

* 주사위 게임3 문제에서

 

한 스터디원분이 푼 코드는 아래와 같았다 !

 

def solution(a, b, c, d):
    answer = 0
    # same_list = [[],[],[],[]]
    set_num = set([a,b,c,d])

    cnt_list = []
    for num in set_num:
        cnt = [a,b,c,d].count(num)
        cnt_list.append([num,cnt])

    cnt_list.sort(key = lambda x : x[1], reverse = True)
    print(cnt_list)

    if cnt_list[0][1] == 4:
        answer = 1111 * cnt_list[0][0]
    elif cnt_list[0][1] == 3:
        answer = (10 * cnt_list[0][0] + cnt_list[1][0]) ** 2
    elif cnt_list[0][1] == 2:
        if len(cnt_list) == 2:
            answer = (cnt_list[0][0] + cnt_list[1][0]) * (abs(cnt_list[0][0] - cnt_list[1][0]))
        elif len(cnt_list) == 3:
            answer = (cnt_list[1][0] * cnt_list[2][0])
    elif len(cnt_list) == 4:
        answer = cnt_list[0][0]
    return answer

 

구글링을 해보니까 제일 보편적인 코드는 

 

def solution(a,b,c,d):
    nums = [a,b,c,d]
    counts = [nums.count(i) for i in nums]

    if max(counts) == 4:
        return 1111*a
    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)

 

 

이 코드인 것 같았다 !

 

 

728x90