[ALGORITHM] Programmers ALGORITHM 연습문제 Lv2 (1)

2 minute read


ALGORITHM Übung - Programmers

  • 알고리즘 문제 풀이를 통한 코딩 테스트 연습

N개의 최소공배수

  • 19/11/2021

def solution(arr):
    def gcd(x, y):
        while(x):
            x, y =  y%x, x 
        return y
    
    res = 1
    for i in arr:
        res *=  i // gcd(res, i)
    return res

JadenCase 문자열 만들기

  • 19/11/2021

def solution(s):
    return " ".join([word.capitalize() for word in s.split(" ")])

행렬의 곱셈

  • 20/11/2021

def solution(arr1, arr2):
    return [[sum(a * b for a, b in zip(row_a, column_b)) for column_b in zip(*arr2)] for row_a in arr1]

피보나치 수

  • 21/11/2021

def solution(n):
    fiboList=[0,1]
    for i in range(n-1):
        fiboList.append(fiboList[i+1] + fiboList[i])

    return fiboList[n]%1234567

# 다른 사람의 좋은 풀이
def solution(n):
    a,b=0,1
    for i in range(n-1):
        a,b=b,a+b
    
    return b%1234567

최댓값과 최솟값

  • 22/11/2021

def solution(s):
    valList = list(s.split(" "))
    minVal = int(valList[0])
    maxVal = int(valList[0])
    for i in valList:
        maxVal = max(maxVal, int(i))
        minVal = min(minVal, int(i))
    return str(minVal) + " " + str(maxVal)

숫자의 표현

  • 23/11/2021

def solution(n):
    answer = 0
    for i in range(1, n+1):
        sum =0
        for j in range(i, n+1):
            sum += j
            if sum == n:
                answer += 1
                break
            elif sum > n:
                break
    return answer

# 다른 사람의 좋은 풀이
def expressions(num):
    return len([i  for i in range(1,num+1,2) if num % i is 0])

다음 큰 숫자

  • 24/11/2021

def solution(n):
    
    numOne = bin(n).count("1")
    while True:
        n += 1
        if bin(n).count("1") == numOne:
            break
    return n

[3차] n진수 게임

  • 25/11/2021

def convert(num, n):
    convertDict = {10:"A", 11:"B", 12:"C", 13:"D", 14:"E", 15:"F"}

    if num == 0:
        return "0"

    ans = ""
    while (num):
        if num%n in convertDict.keys():
            ans = convertDict[num%n] + ans
        else:
            ans = str(num%n) + ans
        num //= n
    return ans

def solution(n, t, m, p):

    replies = ""
    num = 0
    while (len(replies) < t*m):
        replies += convert(num, n)
        num += 1

    return replies[p-1:t*m:m]

# 다른 사람의 좋은 풀이
def solution(n, t, m, p):
    data = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
    numbers = "0"
    for number in range(1, t*m):
        temp = []
        while number > 0:
            temp.append(data[number%n])
            number //= n
        numbers += "".join(reversed(temp))

    return numbers[p-1:t*m:m]

# 참고 : 10진수 숫자를 n진수로 바꾸는 함수
def convert(num, n):

    if num == 0:
        return "0"

    ans = ""
    while (num):
        ans = str(num%n) + ans
        num //= n
    return ans

A Correct Parenthesis

  • 26/11/2021

def solution(s):

    openP = 0
    for p in s:
        if p == "(":
            openP += 1
        else:
            openP -= 1
        if openP < 0:
            return False

    return openP == 0

땅따먹기

  • 28/11/2021

def solution(land):
    for i in range(1,len(land)):
        for j in range(4):
            land[i][j] += max(land[i-1][:j] + land[i-1][j+1:])
    return max(land[-1])