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

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

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

 

안녕하세요 머킹입니다.

pytorch를 빠르게 공부하고 다른 것들을 공부해야겠습니다!

이제 프로젝트를 시작하는데 역시 프로젝트는 기획이 제일 재밌네요 ㅎ

 


배열의 원소만큼 추가하기

 

문제 설명

아무 원소도 들어있지 않은 빈 배열 X가 있습니다.

양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr):
    answer = []
    for num in arr:
        for _ in range(num):
            answer.append(num)
    return answer

드디어 _ 이걸 써봐서 기분이 좋아요.

def solution(arr):
    return [i for i in arr for j in range(i)]

이건 대체 어떻게 푼 거죠 ㅋㅋㅋㅋ신기합니다.

 


빈 배열에 추가, 삭제하기

 

문제 설명

아무 원소도 들어있지 않은 빈 배열 X가 있습니다.

길이가 같은 정수 배열 arr과 boolean 배열 flag가 매개변수로 주어질 때, flag를 차례대로 순회하며 flag [i]가 true라면 X의 뒤에 arr[i]를 arr[i] × 2 번 추가하고, flag [i]가 false라면 X에서 마지막 arr [i] 개의 원소를 제거한 뒤 X를 return 하는 solution 함수를 작성해 주세요.

 

def solution(arr, flag):
    X = []
    
    for i in range(len(arr)):
        if flag[i]:
            for _ in range(arr[i] * 2):
                X.append(arr[i])
        else:
            if arr[i] <= len(X):
                X = X[:-arr[i]]
                
    return X

다른 사람의 풀이를 보니까 zip이랑 enumerate를 사용하더라고요!

 


배열 만들기 6

 

문제 설명

0과 1로만 이루어진 정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk을 만드려고 합니다.

i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합니다.

- 만약 stk이 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.

- stk에 원소가 있고, stk의 마지막 원소가 arr [i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다.

- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr [i]를 추가하고 i에 1을 더합니다.

 

위 작업을 마친 후 만들어진 stk을 return 하는 solution 함수를 완성해 주세요.

단, 만약 빈 배열을 return 해야 한다면 [-1]을 return 합니다.

 

 

문제가 길어서 그런가 한참 이해했습니다.

def solution(arr):
    stk = []  
    i = 0  

    while i < len(arr):
        if not stk:
            stk.append(arr[i])
            i += 1
        elif stk[-1] == arr[i]:
            stk.pop()
            i += 1
        else:
            stk.append(arr[i])
            i += 1

    if not stk:  
        return [-1]
    else:
        return stk

문제 보면 답이 간단할 것 같은데

코드는 되게 복잡하네요.

 

def solution(arr):
    stk = []
    for i in range(len(arr)):
        if stk and stk[-1] == arr[i]:
            stk.pop()
        else:
            stk.append(arr[i])

    return stk or [-1]

다른 사람과 저의 코드를 비교해 보니 제 코드가 길고 복잡했군요.

이렇게 for문과 if문으로 끝나다니...

더 발전해야겠습니다.