본문 바로가기
  • think together
카테부 4기 판교 ai 실무/코테 공부

카테부 4기 판교 ai 실무프로그래머스 코딩 기초 트레이닝 Day19

by hwamgai 2026. 6. 12.

문제 : 세 개의 구분자

https://school.programmers.co.kr/learn/courses/30/lessons/181862

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내코드:

처음에는 바로 for 반복문을 도는걸 생각했으나 그럼 조건이 너무 많아질 것 같아서 패스,,
두번째로 split을 생각했으나, 문자열에 각각의 구분자를 적용 해도 적용이 안됨
🤖 제미나이에게 힌트를 물어보니, 구분자 3개를 1개로 만든 후 진행하라고 해서 바로 작성, 그리고 바로 성공
def solution(myStr):
    answer = []
    
    # index = 0
    # for i in range(len(myStr)):
    #     if (myStr[i] == 'a' or myStr[i] =='b' or myStr[i] =='c'):
    #         if len(myStr[index:i]) != 0:
    #             answer.append(myStr[index:i])
    #             index = i+1
    #             print(answer)
    
    # text = myStr.split('a')
    # print(text)
    # text = myStr.split('b')
    # text = myStr.split('c')
    # print(text)
    
    myStr = myStr.replace('b',"a")
    myStr = myStr.replace('c','a')
    myStr = myStr.split('a')
    
    for i in myStr:
        if len(i) != 0:
            answer.append(i)

    
    
    if len(answer) == 0 :
        answer.append('EMPTY')
        
    return answer

좋은코드:

def solution(myStr):
    answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
    return answer if answer else ['EMPTY']
import re
def solution(myStr):
    answer = [m for m in re.split('a|b|c',myStr) if m]
    if len(answer)==0:
        answer=["EMPTY"]

    return answer
def solution(myStr):
    answer = []
    str_split = ['a', 'b', 'c']
    word = ''
    for s in myStr:
        if s in str_split:
            if word:
                answer.append(word)
                word = ''
            else:
                continue
        else:
            word += s
    if word:
        answer.append(word)
    return answer if answer else [ 'EMPTY']

 

 

 

 

 

문제: 배열의 원소만큼 추가하기

https://school.programmers.co.kr/learn/courses/30/lessons/181861

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내코드:

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

좋은 코드:

def solution(arr):
    return [i for i in arr for j in range(i)]
def solution(arr):
    answer = []
    for num in arr:
        answer += [num] * num
    return answer

🤖 제미나이 코드:

def solution(arr):
    answer = []
    for i in arr:
        repeated_list = [i] * i
        
        # append 대신 extend를 사용하면 리스트 안의 요소를 '알맹이만' 쏙 빼서 추가해 줍니다.
        answer.extend(repeated_list)
        
    return answer

 

 

 

 

문제: 빈 배열에 추가,삭제하기

https://school.programmers.co.kr/learn/courses/30/lessons/181860

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

def solution(arr, flag):
    answer = []
    x = ''
    for i in range(len(flag)):
        if flag[i] is True:
            for j in range(arr[i]*2):
                answer.append(arr[i])
            x = arr[i]
        else:
            answer = answer[:-arr[i]]
            
            
    return answer

좋은 코드:

def solution(arr, flag):
    arr1 = []
    for i, j in zip(arr, flag):
        if j:
            arr1 += [i] * i * 2
        else:
            arr1 = arr1[:-i]
    return arr1
def solution(arr, flag):
    X = []
    for i, f in enumerate(flag):
        if f:
            X += [arr[i]] * (arr[i]*2)
        else:
            for _ in range(arr[i]):
                X.pop()
    return X

🤖제미나이 코드:

def solution(arr, flag):
    answer = []
    
    for i in range(len(flag)):
        if flag[i]:
            answer.extend([arr[i]] * (arr[i] * 2))
        else:  
            answer = answer[:-arr[i]]
            
    return answer

 

 

 

 

문제: 배열만들기6

https://school.programmers.co.kr/learn/courses/30/lessons/181859

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내 코드:

처음에 stk 를 '' 문자열로 해서 에러
def solution(arr):
    answer = []
    stk = []
    
    for i in range(len(arr)):
        if len(stk) == 0:
            stk.append(arr[i])
        else:
            if arr[i] == stk[-1]:
                stk = stk[:-1]
            else:
                stk.append(arr[i])
    
    if len(stk) == 0 : stk.append(-1)
    answer = stk
    
    return answer

🤖제미나이 코드 : 

def solution(arr):
    stk = []
    
    for num in arr:
        # stk에 원소가 있고, 마지막 원소가 현재 숫자와 같다면 맨 뒤 원소 제거
        if stk and stk[-1] == num:
            stk.pop()
        # stk이 비어있거나, 마지막 원소와 현재 숫자가 다르다면 원소 추가
        else:
            stk.append(num)
            
    # 비어있으면 [-1]을, 채워져 있으면 stk을 그대로 반환
    return stk if stk else [-1]

좋은코드:

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]

 

 

 

문제: 무작위로 k개의 수 뽑기

https://school.programmers.co.kr/learn/courses/30/lessons/181858

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

내코드:

파이썬 중복 지우기
my_list = [2, 1, 3, 2, 4, 1, 5]
unique_list = list(set(my_list))
print(unique_list) # 결과: [1, 2, 3, 4, 5]

sorted(list(set(arr))) 로 정렬을 하려 했으나
문제에서 원하는건 크기 정렬이 아니라 들어온순이기 때문에 다시..
#틀린 코드

def solution(arr, k):

    arr = list(set(arr))
    print(arr)
    
    arr = arr[:k]
    print(arr)
    
    if len(arr) == k:
        return arr
    else:
        for i in range(k-len(arr)):
            arr.append(-1)
        return arr
#성공한 코드

def solution(arr, k):
    answer = []

    #arr = (list(set(arr)))
    for i in arr:
        if len(answer) == k:
            break
        
        if i not in answer:
            answer.append(i)
        
    print(answer)
    

    if len(answer) == k:
        return answer
    else:
        for i in range(k-len(answer)):
            answer.append(-1)
        return answer

좋은 코드:

def solution(arr, k):
    res = list(dict.fromkeys(arr))
    res.extend([-1] * max(0, k - len(res)))
    return res[:k]
def solution(arr, k):
    ret = []
    for i in arr:
        if i not in ret:
            ret.append(i)
        if len(ret) == k:
            break

    return ret + [-1] * (k - len(ret))