ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

     

     

Designed by Tistory.