Coding/Python

[python]조건문

후__아 2024. 4. 17. 16:57

if-else문 관련 문제 풀이

# 프로그래머스 조건 문자열
def solution(ineq, eq, n, m):
    if ineq == '>':
        if eq == '=':   return int(n >= m)
        else: return int(n > m)
    else:
        if eq == '=':   return int(n <= m)
        else: return int(n < m)
    return
    
    # 다른 풀이 - eval, replace 활용 기억하기!
    # return int(eval(str(n) + ineq + eq.replace('!', '') + str(m)))

 

# 프로그래머스 주사위 게임2
# 세 개의 값이 다 같을 때, 두 개만 같을 때, 다 다를 때
def solution(a, b, c):
    x = a + b + c
    y = a*a + b*b + c*c
    z = a*a*a + b*b*b + c*c*c
    if a != b and a != c and b != c: return x
    elif a == b and a == c and b == c: return x * y * z
    else: return x * y
    return
    
    # 다른 사람 풀이
    # check = len(set([a,b,c]))
    # if check == 1, elif check == 2, else인 경우로 나눠서 풀이

 

+while문 안에서 작성할 땐, 굳이 if-else 요약문으로 쓰지 않기!

=> 오히려 runtime 오래 걸려서 시간 초과됨...

# 프로그래머스 콜라츠 수열
# 초반 풀이 - 시간 초과ㅠㅡㅠ
def solution(n):
    answer = []
    while n > 1:
        answer.append(n/2 if n%2 == 0 else 3*n + 1)
        print(answer)
    answer.append(1)
    return answer
    
    # 수정 후
    answer = []
    while n > 1:
        answer.append(n)
        if n%2 == 0:
            n /= 2
        else:
            n = 3*n + 1
    answer.append(1)
    return answer

    # 다른 사람 풀이
    answer = [n]
    while n!=1:
        if n%2:n=3*n+1
        else: n//=2
        answer.append(n)
    return answer

 

+주사위 경우의 수 문제

리스트.count(요소) 잘 활용하기!!!

# 프로그래머스 주사위게임3
def solution(a, b, c, d):
    li = [a, b, c, d]
    tot = set(li)      # 중복 없는 {}
    p = int(list(tot)[0])
    if len(tot) == 1: return p*1111

    elif len(tot) == 2:
        q = int(list(tot)[1])
        if li.count(p) == 2:    # p2, q2
            return (p+q)*abs(p-q)
        elif li.count(p) == 3:  # p3, q
            return (10*p+q)**2
        else: # q3, p
            return (10*q+p)**2
        
    elif len(tot) == 3:
        q = int(list(tot)[1])
        r = int(list(tot)[2])
        if li.count(p) == 2:    # p2, q, r
            return q*r
        elif li.count(q) == 2:  # p, q2, r
            return p*r
        else:   # p, q, r2
            return p*q
    else:   # p, q, r, s
        return min(li)
    return


# 다른 사람 풀이
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)