[코딩 기초 트레이닝] Day12 리스트(배열)
리스트 자르기
문제 설명
정수 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 함수를 완성해주세요.
제한사항
n
은 1, 2, 3, 4 중 하나입니다.slicer
의 길이 = 3slicer
에 담긴 정수를 차례대로 a, b, c라고 할 때- 0 ≤ a ≤ b ≤
num_list
의 길이 - 1 - 1 ≤ c ≤ 3
- 0 ≤ a ≤ b ≤
- 5 ≤
num_list
의 길이 ≤ 30 - 0 ≤
num_list
의 원소 ≤ 100
solution
def solution(n, slicer, num_list):
if n == 1:
return num_list[0:slicer[1]+1]
elif n == 2:
return num_list[slicer[0]:]
elif n == 3:
return num_list[slicer[0]:slicer[1]+1]
else:
return num_list[slicer[0]:slicer[1]+1:slicer[2]]
-------------------------------------------------------------
다른 풀이
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]
입출력 예
n | slicer | num_list | result |
---|---|---|---|
3 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 3, 4, 5, 6] |
4 | [1, 5, 2] | [1, 2, 3, 4, 5, 6, 7, 8, 9] | [2, 4, 6] |
첫 번째로 나오는 음수
문제 설명
정수 리스트 num_list
가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
제한사항
- 5 ≤
num_list
의 길이 ≤ 100 - -10 ≤
num_list
의 원소 ≤ 100
solution
def solution(num_list):
for i, v in enumerate(num_list):
if v < 0:
return i
return -1
-----------------------------------------
다른 풀이
def solution(num_list):
for i in range(len(num_list)):
if num_list[i]<0:return i
return -1
입출력 예
num_list | result |
---|---|
[12, 4, 15, 46, 38, -2, 15] | 5 |
[13, 22, 53, 24, 15, 6] | -1 |
배열 만들기 3
문제 설명
정수 배열 arr
와 2개의 구간이 담긴 배열 intervals
가 주어집니다.
intervals
는 항상 [[a1, b1], [a2, b2]]
의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr
의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
solution
def solution(arr, intervals):
answer = []
for x, v in intervals:
answer.append(arr[x:v+1])
return sum(answer, [])
-----------------------------------
다른 풀이
def solution(arr, intervals):
answer = []
for a,b in intervals: answer+=arr[a:b+1]
return answer
-----------------------------------
다른 풀이
def solution(arr, intervals):
return arr[intervals[0][0]:intervals[0][1] + 1] + arr[intervals[1][0]:intervals[1][1] + 1]
제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 1 ≤
arr
의 원소 < 100
- 1 ≤
- 1 ≤
a1
≤b1
<arr
의 길이 - 1 ≤
a2
≤b2
<arr
의 길이
입출력 예
arr | intervals | result |
---|---|---|
[1, 2, 3, 4, 5] | [[1, 3], [0, 4]] | [2, 3, 4, 1, 2, 3, 4, 5] |
2의 영역🔪
문제 설명
정수 배열 arr
가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr
에 2가 없는 경우 [-1]을 return 합니다.
제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 1 ≤
arr
의 원소 ≤ 10
- 1 ≤
solution
def solution(arr):
answer = []
if 2 in arr:
if arr.count(2) > 1:
start = arr.index(2)
end = len(arr) - arr[::-1].index(2)
return arr[start:end]
else:
idx = arr.index(2)
return [arr[idx]]
else:
return [-1]
return answer
---------------------------------------------------
def solution(arr):
if 2 not in arr:
return [-1]
return arr[arr.index(2) : len(arr) - arr[::-1].index(2)]
입출력 예
arr | result |
---|---|
[1, 2, 1, 4, 5, 2, 9] | [2, 1, 4, 5, 2] |
[1, 2, 1] | [2] |
[1, 1, 1] | [-1] |
[1, 2, 1, 2, 1, 10, 2, 1] | [2, 1, 2, 1, 10, 2] |
느낀 점
뭔가 아직까지 return과 그 적용 범위에 대해 다시 공부 해야겠습니다.배열 조각하기
문제 설명
정수 배열 arr
와 query
가 주어집니다.
query
를 순회하면서 다음 작업을 반복합니다.
- 짝수 인덱스에서는
arr
에서query[i]
번 인덱스를 제외하고 배열의query[i]
번 인덱스 뒷부분을 잘라서 버립니다. - 홀수 인덱스에서는
arr
에서query[i]
번 인덱스는 제외하고 배열의query[i]
번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr
의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 5 ≤
arr
의 길이 ≤ 100,000- 0 ≤
arr
의 원소 ≤ 100
- 0 ≤
- 1 ≤
query
길이 < min(50,arr
의 길이 / 2)query
의 각 원소는 0보다 크거나 같고 남아있는arr
의 길이 보다 작습니다.
solution
def solution(arr, query):
new = []
for i, v in enumerate(query):
if i % 2 == 0:
del (arr[:v:-1])
else:
del (arr[:v])
return arr
-----------------------------------------
def solution(arr, query):
for k, q in enumerate(query):
if k % 2 == 0:
arr = arr[:q + 1]
else:
arr = arr[q:]
return arr
입출력 예
arr | query | result |
---|---|---|
[0, 1, 2, 3, 4, 5] | [4, 1, 2] | [1, 2, 3] |
📝 파이썬 리스트 요소 삭제: clear, del, remove, pop
del 구문: 인덱스나 슬라이스로 특정 범위의 요소를 삭제
>>> del arr[0:2]
>>> print(arr)
[2,3,4,5]
리스트의 인덱스 범위가 넘어가지 않도록 주의 해주세요.
clear(): 리스트의 모든 요소를 삭제합니다.
remove(): 입력한 값을 검색해서 삭제합니다. 값이 중복될 경우에는 첫 번째 검색 결과를 삭제합니다.
>>> arr = [0, 1, 2, 3, 4, 5]
>>> arr.remove(3)
>>> print(arr)
[0, 1, 2, 4, 5]
pop(): 맨 뒤의 값을 삭제합니다. 인자를 지정할 경우 특정 위치의 값을 삭제합니다.
>>> arr = [0, 1, 2, 3, 4, 5]
>>> print(arr.pop())
[0, 1, 2, 3, 4]
>>> print(arr.pop(2))
[0, 1, 3, 4, 5]
pop() 메서드의 기본적인 원리상 중간에 있는 값을 지정할 경우 시간 복잡도가 O(n)이므로 주의가 필요합니다.
댓글남기기