ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8.7.월요일 코딧 강의 , 프로그래머스 복습
    TIL( Today I Learned) 2023. 8. 7. 23:29

    1,

    리스트 제거 방식

    리스트의 뒤에서 없앨 때 

    x 라는 리스트가 있고 x =[[0, 1, 2, 3, 4, 5, 6, 7] 에서 

    x.pop() for _ in range(제거 횟수 ) == x[: -제거횟수 ]

    2,

    map() 함수를 다시 공부

    3,

    프로그래머스 복습 중에 주의할 사항과 그때는 차마 이해 못했던 것들 , 내 오답의 이유 등을 살펴보았다

     

      ###### 합성수의 갯수를 알려주는 함수 #######

     

    def solution(n):

      def is_composite(num):

        count =0

        for i in range(1,num+1):

          if num%i == 0:

            count +=1

        return count >=3

      

        count = 0

        for i in range(4,n+1):

          if is_composite(i):

            count += 1

        return count

     

     

     

    def solution(n):# 합성수의 갯수를 알려주는 함수

        def is_composite(num): # 합성수 임을 알려주는 함수 = 약수 3개 이상인 수 

     

          count = 0

          for i in range(1,num+1):

            if num%i == 0:

              count += 1

          return count >= 3 # 이것이 결정적인 key ? why ? 3개 이상이 약수면 --> 합성수 return  a ==> a 조건에 맞다면 참 즉 True를 출력

                            # 고로 합성수인지 아닌지 구별하는 함수는 만들었다 

                            # 그럼 이제 그 내가 정의한 함수를 쓸 함수를 만들어야 한다.

        count = 0 

        for i in range(4,n+1): #n 까지의 즉 n 포함 하고 그것보다 작은 수 중에서 홥성수의 갯수 를 구하는 함수

              if is_composite(i):

                count += 1

        return count

     

     

     

     

     

    3…맵함수 map()

     

    def solution(order):

        return sum(map(lambda x :str(order).count(str(x)),[3,6,9])) 를 통한 공부

     

    map() 함수는 파이썬에서 사용되는 함수로, 주어진 함수를 반복 가능한 객체(예: 리스트, 튜플 등)의 각 항목에 적용하여 새로운 반복 가능한 객체로 반환하는 역할을 합니다.

    map() 함수의 일반적인 문법은 다음과 같습니다:

    map(함수, 반복 가능한 객체)

     

    동작 방식은 다음과 같습니다:

    1. 함수 인자는 반복 가능한 객체(iterable)의 각 요소에 적용할 함수를 지정합니다.
    2. 반복 가능한 객체는 처리하려는 항목들의 모음입니다.

    map() 함수는 iterable의 각 요소에 함수를 적용하고, 그 결과를 새로운 반복 가능한 객체로 반환합니다.

    다음은 map() 함수를 사용하는 예제입니다:

     

    # 예제: 리스트의 각 요소를 제곱하기
    numbers = [1, 2, 3, 4, 5]

    def square(x):
        return x**2

    squared_numbers = map(square, numbers)
    print(list(squared_numbers))  # 출력: [1, 4, 9, 16, 25]

     

    이 예제에서는 square() 함수를 정의하여 숫자를 입력받고 해당 숫자의 제곱을 반환하도록 했습니다. 그리고 map() 함수를 사용하여 numbers 리스트의 각 요소에 square() 함수를 적용했습니다. map() 함수는 반복자(iterator)를 반환하므로, 결과를 확인하기 위해 list()를 사용하여 새로운 리스트로 변환했습니다.

    map() 함수는 컬렉션 내의 각 요소에 특정 연산 또는 변환을 적용하고, 그 결과를 새로운 반복 가능한 객체로 수집해야 할 때 유용합니다. 파이썬에서 데이터를 처리하는 간결하고 우아한 방법을 제공하는 함수입니다.

     

     

     

     

    #### 가까운 1 찾기 #### - 틀렸던 문제 

    문제 설명

    정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

    단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.

     

    제한사항

    • 3 ≤ arr의 길이 ≤ 100'000

     

    입출력 예

    arr idx result
    [0, 0, 0, 1] 1 3
    [1, 0, 0, 1, 0, 0] 4 -1
    [1, 1, 1, 1, 0] 3 3

     

    def solution(arr, idx):

        answer = 0

        try:

            answer = arr.index(1, idx).    #——>(찾는거, 시작점)

        except:

            answer = -1

     

        return answer

    1. solution' 함수는 입력 정수 배열인 'arr'과 주어진 정수 인덱스인 'idx'라는 두 개의 인수를 입력으로 받습니다.
    2. 'answer' 변수는 0 값으로 초기화됩니다. 이 변수는 배열에서 주어진 색인 'idx' 다음에 나오는 '1'의 색인을 저장하는 데 사용됩니다.
    3. 이 코드는 try-except 블록을 사용하여 arr 목록에서 index() 메서드를 사용할 때 발생할 수 있는 예외를 처리합니다. index() 메서드는 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환합니다. 검색할 요소와 검색할 시작 인덱스이것 포함라는 두 개의 인수를 사용합니다.
    4. 'answer = arr.index(1, idx)' 행은 주어진 색인 'idx'에서 시작하여 목록 'arr'에서 다음에 나타나는 '1'의 색인을 찾으려고 시도합니다. 주어진 인덱스 뒤에 1이 없으면 ValueError 예외가 발생합니다.
    5. index() 메소드가 다음 1 항목을 성공적으로 찾으면 해당 항목의 인덱스로 answer 변수를 업데이트합니다.
    6. index() 메서드가 ValueError 예외를 발생시키는 경우(즉, 주어진 인덱스 다음에 1이 발견되지 않음) 코드는 except 블록에 들어가고 answer 변수가 설정됩니다. -1로.
    7. 마지막으로 이 함수는 배열에서 주어진 idx 포함해서다음에 나타나는 1의 인덱스를 나타내는 answer 값을 반환합니다. 해당 항목이 없으면 -1을 반환합니다.

     

    def solution(arr, idx):

        answer = 0

        try:

            answer = arr.index(1, idx)

        except:

            answer = -1

     

        return answer

     

    #### 수열과 구간 쿼리 1 ####

    • 문제 설명

    정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. 

    queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.

    각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.

    위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

     

    제한사항

    • 1 ≤ arr의 길이 ≤ 1,000
    • 1 ≤ queries의 길이 ≤ 1,000

     

    입출력 예

    arr queries result
    [0, 1, 2, 3, 4] [[0, 1],[1, 2],[2, 3]] [1, 3, 4, 4, 4]

     

    입출력 예 설명

    입출력 예 #1

    • 각 쿼리에 따라 arr가 다음과 같이 변합니다.
    i queries[i] arr
    - - [0, 1, 2, 3, 4]
    0 [0,1] [1, 2, 2, 3, 4]
    1 [1,2] [1, 3, 3, 3, 4]
    2 [2,3] [1, 3, 4, 4, 4]

    따라서 [1, 3, 4, 4, 4]를 return 합니다.

     

     

    @@@@

     

    def process_queries(arr, queries):

        for query in queries:

            s, e = query

            for i in range(s, e + 1):

                arr[i] += 1

        return arr

     

    다른 사람 풀이

    @@@@@@

    def solution(arr, queries):

        for (s, e) in queries:

            arr = [a+1 if s <= i <= e else a for i, a in enumerate(arr)]

        return arr

     

     

    #### 빈 배열에 추가, 삭제하기  ####

    문제 설명

    아무 원소도 들어있지 않은 빈 배열 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]

     

    입출력 예 설명

     

    입출력 예 #1

    • 예제 1번에서 X의 변화를 표로 나타내면 다음과 같습니다

    따라서 [3, 3, 3, 3, 4, 4, 4, 4] return 합니다.
    flag[i] arr[i] X
    []
    0 true 3 [3, 3, 3, 3, 3, 3]
    1 false 2 [3, 3, 3, 3]
    2 true 4 [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4]
    3 false 1 [3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4]
    4 false 3 [3, 3, 3, 3, 4, 4, 4, 4]

     

     

    내 오답

    def solution(arr, flag):

        

        x=[]

        for i,j in zip(arr,flag):  <---- 전에는 enumerate을 썼었다 

            if j == True:

                p =2*i

                for _ in range(p):

                    x.append(i)

            else:                                  

                for _ in range(i):          <------ 쳇은  이 아래에다 if x: 를 넣어야 한덴다. 이유는 리스트 x가 비어있을 수 있기에 

                    x.pop()

        return x

                    

        쳇것 1

          def solution(arr, flag):

        X = []

        for i in range(len(flag)):

            if flag[i]:

                X.extend([arr[i]]*(arr[i]*2)

            else:

                X = X[:-arr[i]]

        return X

    위 코드에서 X는 빈 배열로 초기화되며, flag를 순회하며 아래와 같이 처리됩니다.

     

    flag[i]가 True인 경우, X의 뒤에 arr[i]*2를 두 번 추가합니다.

    flag[i]가 False인 경우, X에서 마지막 arr[i]개의 원소를 제거합니다.

    최종적으로 처리된 X를 반환합니다.

          

       def solution(arr, flag):

        x = []

        for i, f in enumerate(flag):

            if f:  # If the value in flag is True

                x += [arr[i]] * (arr[i] * 2)

            else:

                for _ in range((arr[i])):

                    x.pop()

        return x

     

     

     

     

     

Designed by Tistory.