-
8.12.토요일 잭팟스터디, 문제 풀이 & 미니강의TIL( Today I Learned) 2023. 8. 12. 23:01
- 1. 오늘 미니강의
- 세 개의 구분자 // 처리하는 방식 세가지
문제 설명
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
제한사항
- 1 ≤ myStr의 길이 ≤ 1,000,000
입출력 예
myStr result "baconlettucetomato" ["onlettu", "etom", "to"] "abcd" ["d"] "cabab" ["EMPTY"] 입출력 예 설명
입출력 예 #1
- 문제 설명의 예시와 같습니다.
입출력 예 #2
- "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
- "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
- 따라서 ["d"]를 return 합니다.
입출력 예 #3
- "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
- 따라서 ["EMPTY"]를 return 합니다.
def solution(myStr):
ls =[]
ms =''
for i in myStr:
if i not in ['a','b','c']:
ms += i
else:
if ms:
ls.append(ms)
ms = ''
if ms:
ls.append(ms)
else:
if ms=="" and ls==[]:
ls = ["EMPTY"]
return ls
##################################################
현재로서는 내가 이해하는 가장 간단한 식
def solution(myStr):
answer = [x for x in myStr.replace('a', ' ').replace('b', ' ').replace('c', ' ').split() if x]
return answer if answer else ['EMPTY']
###################################################
a = "baconlettucetomato"
translation_table = str.maketrans('abc', " ") # Removing 'a', 'b', 'c'
# " " 공백이 스페이스바 세번 눌렀다 왜 'abc' 가 세글자니까
a_without_abc = a.translate(translation_table).split() # Removing 'a', 'b', 'c'
쳇 3.5의 오류
a = "baconlettucetomato"
translation_table = str.maketrans('', '', 'abc') # Removing 'a', 'b', 'c'
a_without_abc = a.translate(translation_table) # Removing 'a', 'b', 'c'
a5 = [a_without_abc[i:i+7] for i in range(0, len(a_without_abc), 7)]
print(a5).
==> ['onlettu', 'etomto']
str.maketrans(x, y, z)
여기서 x, y, 그리고 z는 각각 다음과 같은 역할을 합니다:
- x: 변환할 문자를 포함하는 문자열 또는 None입니다. 이 문자열의 각 문자는 대응되는 y 문자열에서의 대체 문자로 사용됩니다. 만약 x가 None이면, 문자들은 삭제되지 않고 y에서의 대체만 수행됩니다.
- y: 변환될 대체 문자를 포함하는 문자열 또는 None입니다. 이 문자열의 각 문자는 x 문자열에서의 대응되는 문자를 대체할 문자로 사용됩니다. 만약 y가 None이면, x 문자열에서의 문자는 삭제되지 않고 그대로 유지됩니다.
- z: 삭제할 문자를 포함하는 문자열이며, 이 문자열에 포함된 모든 문자는 변환 과정에서 삭제됩니다.
따라서 str.maketrans(x, y, z) 함수를 호출하여 변환 테이블을 만들고, 이 테이블을 str.translate() 메서드에 전달하여 문자열의 변환 또는 삭제 작업을 수행할 수 있습니다.
요약:
- x의 문자는 해당하는 y의 문자로 대체됩니다.
- z에 포함된 문자는 모든 상황에서 문자열에서 제거됩니다.
str.maketrans(x, y, z)에서 이러한 인수들의 관계는 생성된 변환 테이블을 str.translate() 메서드와 함께 사용할 때 문자가 어떻게 변환되거나 제거되는지를 결정합니다.
- 2. 수열과 구간 쿼리 4
-
문제 설명
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000
- 1 ≤ queries의 길이 ≤ 1,000
입출력 예
arr queries result [0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4] 입출력 예 설명
입출력 예 #1
- 각 쿼리에 따라 arr가 다음과 같이 변합니다.
arr [0, 1, 2, 4, 3] [1, 2, 3, 5, 4] • 따라서 [3, 2, 4, 6, 4]를 return 합니다.
def solution(arr,queries):
for query in queries:
s,e,k = query
for i in range(s,e+1):
if i % k==0 :
arr[i] += 1
return arr
남의 풀이
def solution(arr, queries):
for q in queries:
for i in range((q[0] + q[2] - 1) // q[2] * q[2], q[1] + 1, q[2]):
arr[i] += 1
return arr
'TIL( Today I Learned)' 카테고리의 다른 글
8.14.월요일 (0) 2023.08.14 8.13.일요일 (0) 2023.08.13 8.11.금요일 (0) 2023.08.11 8.10.목요일 코딧 강의 & 프로그래머스 문제 복습 (1) 2023.08.10 8.9.수요일 / 아침에 일어나서 도서관 간 날 // 7시 10분 부터 공부 시작 (1) 2023.08.10