TIL -19 알고리즘

이동근·2021년 1월 4일
0

알고리즘

목록 보기
3/19

1. 최댓값과 최솟값

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자중 최솟값과 최댓값을 찾아 '최솟값 최댓값'으로 반환하는 함수 solution을 완성하세요

def solution(s):
    s_list = s.split("")
    n = [int(n) for i in s_list]
    n.sort()
    return str(n[0]) + " " + srt([len(n)-1])
def solution(n):
    s = list(map(int, s.split()))
    return str(min(s)) + " " +str(max(s))

-> 직접 만든 코드는 자연수에서는 작동하지만 음수에서는 제대로 작동하지 않았다. 문자열을 split해서 리스트로 만들어 구분 짓고 정렬해서 값을 추출한다는 큰 틀은 알았지만, 코드를 구현하는데 있어서 많은 어려움을 가졌다. 그리고 for과 if 를 한 줄로 사용하는 방법을 공부할 예정이다.

map 함수 - 내장함수 map은 리스트나 튜플을 지정함수로 처리해 주는 역할을 합니다. 주로 코드를 간단하게 만드는데 사용이 된다. 쉽게 말하자면 특정범위 내에 있는 집합 형태의 것들을 원하는 것으로 변경해주는 것을 의미 합니다. 예를 들어 리스트에 문자로 정의 되어 있는 것을 한번에 숫자로 변경해줄때 사용합니다.

a,b,b = map(int, ['1','2','3']
print(a,b,c,a+b+c)
-> 1,2,3,6

최솟값 만들기

길이가 같은 배열 A,B가 있습니다. 각 배열은 자연수로 이루어져 A*B를 진행하고 배열의 길이만큼 진행합니다.

두 수를 곱한 값을 누적해서 더하고 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표(단 각 배열에서 k번째 숫자를 뽑았다면, 다음에 k번째 숫자는 다시 뽑을 수 없다.)

코드

def Getminproduct(A,B):
    sum = 0
    a.sort()                - > 오름차순
    b.sort(reverse=True)    - > 내림차순
    
    for i, j in zip(A,B):
    	sum += i * j
        
    return sum

-> 이 문제의 핵심은 zip함수 인것 같다. 일단 각 리스트의 파라이미터의 곱이 최소가 되야 하기 때문에 한 리스트는 오름차순, 나머지 한 리스트는 내림차순으로 해준다. 그리고 zip함수를 통해 튜플로 묶어주고 그 값을 sum에 더해나가는 방식으로 값을 구해나가면 된다.

※ zip함수 - 여러리스트에 있는 값을 새로운 리스트에 담고 싶을때 사용하는 함수이다.

a = [1,2]
b = [3,4]
print(zip(a,b))
-> (1,3), (2,4)

피보나치의 수열

2 이상의 n이 입력 되었을때 1234567로 나눈 값을 리턴하는 함수 solution을 구하세요

def solution(n):
	current = 1
    previous =0
    
    for i in range(1,n):
    	previous, current = current, previous + current
        
        return current % 1234567

-> 피보나치 수열은 많이 코드로 구현 해봐서 문제를 해결하는데 있어 크게 어려움을 가지지 않았따.

profile
하루하루 1cm 자라는 개발자

0개의 댓글