[TIL] 23.01.23

문종현·2023년 1월 23일
0

TIL

목록 보기
70/119
post-custom-banner

👉 오늘 한 일

  • 프로그래머스 문제풀이(level 0)

프로그래머스 문제풀이

1. 유한소수 판별하기 📌

  • 프로그래머스 lv. 0, 유한소수 판별하기

  • 2시간을 고민했으나 풀지 못했다.. level 0에서 막히는건 처음이다 😥 최대공약수를 구해 기약분수를 구현하는 데까지는 성공했으나, 소인수 판별에서 막혀 결국 다른 사람의 풀이를 참고해서 풀어보았다.

from math import gcd
def solution(a, b):
    b //= gcd(a,b) # b를 a,b의 최소공약수로 나눔
    while b%2==0:
        b//=2
    while b%5==0:
        b//=5
    return 1 if b==1 else 2
  • 이 사람은 최대공약수를 직접 구현하지 않고 모듈을 사용했다.

  • 참신했던 것은, 소인수분해를 구현하지 않고 while문을 사용해 2, 5를 인수로 갖는지 판별한 점이다!

  • 유클리드 호제법(최대공약수 구하기)과 소인수분해를 직접 구현한 풀이

# 유클리드 호제법
def gcd(a, b):
    if a % b == 0:
        return b
    else:
        return gcd(b, a%b)

# 소인수분해
def factorization(x):
    d = 2
    output = []
    
    while d <= x:
        if x % d == 0:
            output.append(d)
            x /= d
        else:
            d += 1
            
    return output
    
def solution(a, b):
    divide_num = gcd(b, a)
    result = b // divide_num
    
    for num in factorization(result):
        if num not in [2, 5]:
            return 2
    return 1

2. 등수 매기기 📌

def solution(score):
    avg = []
    result = []
    for em in score:
        avg.append(sum(em) / 2)
    
    rank = sorted(avg, reverse=True)
        
    for rnk in avg:
        result.append(rank.index(rnk)+1)
    
    return result
  • 다른 사람 풀이
    • 딕셔너리의 키값으로 등수를 넣으면서 중복이 있으면 제외하도록 구현
def solution(score):
    rank = sorted([sum(s) / 2 for s in score], reverse=True)
    rankDict = {}
    for i, r in enumerate(rank):
        if r not in rankDict.keys():
            rankDict[r] = i + 1
    return [rankDict[sum(s) / 2] for s in score]

3. 특이한 정렬

  • sortedkey 파라미터 활용
  • 같은 값에서 더 큰 수를 가져오기 위해 -x 사용
def solution(numlist, n):
    return sorted(numlist, key=lambda x : (abs(x - n), -x))

4. 최댓값 만들기 (2)

def solution(numbers):
    lst = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            lst.append(numbers[i]*numbers[j])
    return max(lst)
  • 다른 사람 풀이
    • 오름차순 정렬 후에 양 극단에 있는 수끼리 곱한 것 중 큰 것을 return
def solution(numbers):
    numbers = sorted(numbers)
    return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2]) 
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글