본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 11. 1.
728x90
 

[파이썬] 프로그래머스 Lv0.  배열의 원소만큼 추가하기,  빈 배열에 추가 & 삭제하기, 배열 만들기 6

 

안녕하세요 머킹입니다.

 


무작위로 K개의 수 뽑기

 

문제 설명

랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다.

적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온 적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.

이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해 봅시다.

정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때,

완성될 배열을 return 하는 solution 함수를 완성해 주세요.

단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.

 

def solution(arr, k):
    answer = []
    unique_set = set()
    for num in arr:
        if num not in unique_set:
            answer.append(num)
            unique_set.add(num)
            if len(answer) == k:
                break
    while len(answer) < k:
        answer.append(-1)
    return answer

배열의 길이를 2의 거듭제곱으로 만들기

 

문제 설명

정수 배열 arr이 매개변수로 주어집니다. 

arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. 

arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr):
    n = len(arr)
    size = 1
    while size < n:
        size *= 2
    if size > n:
        zeros_to_add = size - n
        new_arr = arr + [0] * zeros_to_add
        return new_arr
    else:
        return arr
def solution(arr):
    a = 1
    b = len(arr)
    while a < b :
        a *= 2
    return arr + [0] * (a-b)
    
"""
2의 거듭제곱 확인 방법 O(1)로 해야 겨우 O(n)
logn으로 확인하면 그걸 n번 반복 -> o(nlogn)
길이 1000개 -> 가장 빠른방법은 각각 하드코딩하기 겨우 10개

"""

다른 분의 코드인데

되게 간결하고 좋네요..!!!