Day12 리스트(배열)
- 리스트 자르기
- 첫 번째로 나오는 음수
- 배열 만들기 3
- 2의 영역
- 배열 조각하기
리스트 자르기
문제 설명
정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로 올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
def solution(n, slicer, num_list):
answer = []
a, b, c = slicer[0], slicer[1], slicer[2]
if n == 1: answer = num_list[0:b+1]
elif n == 2: answer = num_list[a:]
elif n == 3: answer = num_list[a:b+1]
else: answer = num_list[a:b+1:c]
return answer
a, b, c = slicer
배열 값을 각 변수에 저장하는데 이렇게 간단하게도 할 수 있었다 역시 파이썬
첫 번째로 나오는 음수
문제 설명
정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
def solution(num_list):
answer = [idx for idx, value in enumerate(num_list) if value < 0]
return answer[0] if answer else -1
리스트 컴프리헨션 표현식은 대괄호로 리스트를 생성해서 바로 정수를 출력하지 못했다
그래서 답이 5이면 [5]로 테스트 실패
근데 어차피 결과값은 1개뿐이니 리스트의 0번째 인덱스를 출력하도록 함!
배열 만들기 3
문제 설명
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
def solution(arr, intervals):
a, b = intervals
return arr[a[0]:a[1]+1]+arr[b[0]:b[1]+1]
배열 intervals의 꼴은 항상 같으니 배열 하나씩 저장하고 인덱스를 활용하여 풀었다.
def solution(arr, intervals):
s1, e1 = intervals[0]
s2, e2 = intervals[1]
return arr[s1:e1+1] + arr[s2:e2+1]
비슷한 풀이지만 가독성이 더 좋아보이는 코드
2의 영역
문제 설명
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.단, arr에 2가 없는 경우 [-1]을 return 합니다.
def solution(arr):
answer = []
idx_range = [idx for idx, value in enumerate(arr) if value == 2]
min_range = min(idx_range, default=-1)
max_range = max(idx_range, default=-1)
return arr[min_range:max_range+1] if arr[min_range:max_range+1] else [-1]
배열 안에서 값이 2인 인덱스를 모두 찾고
2인 인덱스의 최소, 최대를 구해서,
최대, 최소 인덱스의 값을 포함한 배열을 리턴하도록 했다.
근데 -1을 깔끔하게 처리하지는 못한 것 같음.
최소, 최대 구할 때 배열이 빈 값이면 ValueError가 나서 기본 값을 임의로 -1로 정해두기도 함.
def solution(arr):
if 2 not in arr:
return [-1]
return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
다른 사람 풀이 :
앞쪽부터 순회해서 값이 2인 인덱스 번호
뒤쪽부터 순회해서 값이 2인 인덱스 번호를 찾아서 슬라이싱
arr[::-1].index(2) > 역순 순회해서 인덱스를 구하고,
그 값 전체 길이에서 빼줘야 내가 최종으로 구하는 인덱스 값이 나온다.
len(arr) - arr[::-1].index(2)
깔끔하다..
배열 조각하기
문제 설명
정수 배열 arr와 query가 주어집니다.query를 순회하면서 다음 작업을 반복합니다.짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
def solution(arr, query):
for i, query in enumerate(query):
if i % 2 == 0:
arr = arr[:query+1]
else:
arr = arr[query:]
return arr
며칠 연속으로 리스트, 배열, 문자열 연습하니까 조금씩 감이 오는 것 같다!
쉽지만 쉽지 않은 것들 .. 기초 단계에서 다양한 풀이들을 잘 익히고 넘어가야겠다
오늘도~ 성공~
'코테' 카테고리의 다른 글
프로그래머스 기초문제 Day14 리스트(배열) (1) | 2024.01.14 |
---|---|
프로그래머스 기초문제 Day13 리스트(배열) (1) | 2024.01.13 |
프로그래머스 기초문제 Day11 리스트(배열) (1) | 2024.01.11 |
프로그래머스 기초문제 Day10 문자열 (1) | 2024.01.10 |
프로그래머스 기초문제 Day9 문자열 (1) | 2024.01.09 |