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

프로그래머스 코딩 기초 트레이닝 Day12

by hwamgai 2026. 6. 5.

문제 : 리스트 자르기

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

 

프로그래머스

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

programmers.co.kr

 

내 코드:

def solution(n, slicer, num_list):
    answer = []
    
    if n == 1:
        answer = num_list[:slicer[1]+1]
    elif n == 2:
        answer = num_list[slicer[0]:]
    elif n == 3 :
        answer = num_list[slicer[0]:slicer[1]+1]
    else :
        answer = num_list[slicer[0]:slicer[1]+1:slicer[2]]
    
    return answer

 

 

좋은 코드 :

def solution(n, slicer, num_list):
    a, b, c = slicer
    return [num_list[:b + 1], num_list[a:], num_list[a:b + 1], num_list[a:b + 1:c]][n - 1]
def solution(n, slicer, num_list):
    a, b, c = slicer
    b += 1
    if n <= 2 :
    	if n == 1:
        	return num_list[0:b]
        else:
        	return num_list[a:]
    else:
    	if n == 3:
        	return num_list[a:b]
        else:
        	return num_list[a:b:c]
            
# 쿼리(n) 종류가 많아지면 2분할 방식으로 2이하, 3이상 으로 만들어주면(2진트리)
#n:1~4까지 어떤 경우든 조건문 2번 안에 자리를 찾아 들어가게 됩니다!

 

 

 

 

문제 : 첫 번째로 나오는 음수

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

 

프로그래머스

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

programmers.co.kr

내 코드:

def solution(num_list):

    for i in range(len(num_list)):
        if num_list[i] < 0:
            return i
            
    return -1

좋은 코드:

def solution(num_list):
    return ([i for i in range(len(num_list)) if num_list[i] < 0] or [-1])[0]
def solution(num_list):
    for i, num in enumerate(num_list):
        if num < 0:
            return i
    return -1

 

 

 

 

 

문제 : 배열만들기3

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

 

프로그래머스

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

programmers.co.kr

 

내 코드:

def solution(arr, intervals):
    return arr[intervals[0][0]:intervals[0][1]+1] + arr[intervals[1][0]:intervals[1][1]+1]

좋은코드:

def solution(arr, intervals):
    s1, e1 = intervals[0]
    s2, e2 = intervals[1]
    return arr[s1:e1+1] + arr[s2:e2+1]
    
# 리스트 간 +는 element wise하지 않음
# 예를 들어
#list1 = [1, 2, 3]
#list2 = [4, 5, 6]
#print(list1 + list2)
#출력 결과: [1, 2, 3, 4, 5, 6]
#>>> 즉, 파이썬에서 기본 리스트의 + 연산은 <Not Element-wise>

# 추가로,
# [1, 2, 3] + [4, 5, 6]을 했을 때
#1등끼리 더해서 1 + 4 = 5
#2등끼리 더해서 2 + 5 = 7
#3등끼리 더해서 3 + 6 = 9
#결과: [5, 7, 9]
#이걸 <원소별 연산>이라고 한다
def solution(arr, intervals):
    answer = []
    for a,b in intervals: answer+=arr[a:b+1]
    return answer

 

 

 

 

 

문제 : 2의 영역

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

 

프로그래머스

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

programmers.co.kr

내 코드 :

def solution(arr):
    answer = []
    i = j = -1
    
    for idx, char in enumerate(arr):
        if char == 2:
            if i == -1 :
                i = idx
            else:
                j = idx

    
    if j == -1:
        if i == -1 :
            answer.append(-1)
            return answer
        else :
            answer.append(2)
            return answer
    else:
        answer = arr[i:j+1]
        return answer

#1) i = j = 0 으로 했었는데 그럼 아래와 같은 조건일 때 문제가 생김
#질문: 만약 arr = [2, 1, 1] 처럼 2가 맨 첫 번째(인덱스 0)에 딱 하나만 있는 경우라면
#i와 j값은 각각 어떻게 될까요? 그리고 코드는 어떤 결과를 반환하게 될까요?

#2) 파이썬에서 반복문을 멈출 때 break

#3) 파이썬에서 뒤에서부터 반복문 돌리기
#for char in my_text[::-1]:
#(+) 인덱스까지 포함해서 돌리기
#for idx, char in enumerate(my_text[::-1]):

좋은 코드:

def solution(arr):
    if 2 not in arr:
        return [-1]
    return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
def solution(arr):
    answer = []
    check=[]
    if 2 not in arr:
        return [-1]
    else:
        for i in range(0, len(arr)):
            if arr[i]==2:
                check.append(i)
    return arr[check[0]:check[-1]+1]

 

 

 

 

 

문제 : 배열 조각하기

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

 

프로그래머스

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

programmers.co.kr

내 코드:

def solution(arr, query):
    answer = arr
        
    for idx, char in enumerate(query):
        if idx%2 == 0:
            answer = answer[:char+1]
        else:
            answer = answer[char:]
            
    return answer

좋은 코드:

#for문 내부의 슬라이싱은 메모리 측면에서 좋지 않습니다.

def solution(arr, query):
    # 실제 잘라낼 범위를 가리킬 포인터 변수 초기화
    start = 0
    end = len(arr)  # 슬라이싱 끝 범위를 고려해 len(arr)로 시작
    
    for k, q in enumerate(query):
        if k % 2 == 0:
            end = start + q + 1
        else:
            start = start + q
            
    # 반복문이 다 끝난 후, 최종적으로 '딱 한 번만' 슬라이싱해서 반환합니다.
    return arr[start:end]