[코딩 기초 트레이닝]Day19 문자열, 리스트(배열)
세 개의 구분자 🙄
문제 설명
임의의 문자열이 주어졌을 때 문자 “a”, “b”, “c”를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 “baconlettucetomato”라면 나눠진 문자열 목록은 [“onlettu”, “etom”, “to”] 가 됩니다.
문자열 myStr
이 주어졌을 때 위 예시와 같이 “a”, “b”, “c”를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 [“EMPTY”]를 return 합니다.
제한사항
- 1 ≤
myStr
의 길이 ≤ 1,000,000myStr
은 알파벳 소문자로 이루어진 문자열 입니다.
입출력 예
myStr | result |
---|---|
“baconlettucetomato” | [“onlettu”, “etom”, “to”] |
“abcd” | [“d”] |
“cabab” | [“EMPTY”] |
solution
def solution(myStr):
n2 = myStr.replace("b", "a").replace("c", "a")
new = n2.split("a")
new2 = []
if new.count("") == len(new):
return ["EMPTY"]
for i in new:
if i != "":
new2.append(i)
return new2
---------------------------------------------------------
def solution(myStr):
answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
return answer if answer else ['EMPTY']
-----------------------------------------------------------
def solution(myStr):
new = myStr.replace("b", "a").replace("c", "a").split("a")
x = []
for i in new:
if i:
x += [i]
if x:
return x
else:
return ['EMPTY']
배열의 원소만큼 추가하기
문제 설명
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr
가 매개변수로 주어질 때, arr
의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤
arr
의 길이 ≤ 100 - 1 ≤
arr
의 원소 ≤ 100
입출력 예
arr | result |
---|---|
[5, 1, 4] | [5, 5, 5, 5, 5, 1, 4, 4, 4, 4] |
[6, 6] | [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6] |
[1] | [1] |
solution
def solution(arr):
a = []
for i in arr :
for v in range(i):
a.append(i)
return a
----------------------------
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 함수를 작성해 주세요.
제한사항
- 1 ≤
arr
의 길이 =flag
의 길이 ≤ 100 arr
의 모든 원소는 1 이상 9 이하의 정수입니다.- 현재 X의 길이보다 더 많은 원소를 빼는 입력은 주어지지 않습니다.
입출력 예
arr | flag | result |
---|---|---|
[3, 2, 4, 1, 3] | [true, false, true, false, false] | [3, 3, 3, 3, 4, 4, 4, 4] |
solution
def solution(arr, flag):
x =[]
for i in range(len(flag)):
if flag[i]:
for v in range(arr[i] * 2):
x.append(arr[i])
else:
for v in range(arr[i]):
del x[-1]
return x
--------------------------------------------
def solution(arr, flag):
X = []
for i, f in enumerate(flag):
if f:
X += [arr[i]]*(arr[i]*2)
else:
X = X[:-arr[i]]
return X
빈 배열 만들기 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 합니다.
제한사항
- 1 ≤
arr
의 길이 ≤ 1,000,000arr
의 원소는 0 또는 1 입니다.
입출력 예
arr | result |
---|---|
[0, 1, 1, 1, 0] | [0, 1, 0] |
[0, 1, 0, 1, 0] | [0, 1, 0, 1, 0] |
[0, 1, 1, 0] | [-1] |
solution
def solution(arr):
stk = []
for i in range(len(arr)):
if len(stk) == 0:
stk.append(arr[i])
else:
if stk[-1] == arr[i]:
stk.pop()
i += 1
else:
stk.append(arr[i])
i += 1
if len(stk) == 0:
return [-1]
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]
# 객체1 or 객체2 연산은 bool(객체1)dl True이면 객체1을, False이면(비어 있으면) 객체2를 반환한다고 하네요.
----------------------------------------
def solution(arr):
answer = []
i = 0
while i < len(arr):
if not answer:
answer.append(arr[i])
elif answer[-1] == arr[i]:
answer.pop()
else:
answer.append(arr[i])
i += 1
return answer if answer else [-1]
객체1 or 객체2 연산은 bool(객체1)이 True이면 객체1을, False이면(비어 있으면) 객체2를 반환합니다.
무작위로 K개의 수 뽑기
문제 설명
랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k
의 배열을 예상해봅시다.
정수 배열 arr
가 주어집니다. 문제에서의 무작위의 수는 arr
에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k
보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.
제한사항
- 1 ≤
arr
의 길이 ≤ 100,000- 0 ≤
arr
의 원소 ≤ 100,000
- 0 ≤
- 1 ≤
k
≤ 1,000
입출력 예
arr | k | result |
---|---|---|
[0, 1, 1, 2, 2, 3] | 3 | [0, 1, 2] |
[0, 1, 1, 1, 1] | 4 | [0, 1, -1, -1] |
solution
def solution(arr, k):
new = []
for i in arr:
if i not in new:
new.append(i)
if len(new) < k:
return new + [-1]* (k - len(new))
else:
return new[:k]
댓글남기기