ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2023.7.17.월요일 . 프로그래머스 문제
    TIL( Today I Learned) 2023. 7. 17. 12:20

     

    • 짝수의 합
    문제 설명

    정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

     

    def solution(n):
    answer = 0
    for i in range(1,n+1):
    if i%2 == 0:
    answer += i
    else:
    pass
     
     
    return answer
     
    다른사람 것
     
    def solution(n):
    return sum([i for i in range(2, n + 1, 2)])
     
     
     
     
     
     
     
     

    길이에 따른 연산
    문제 설명

    정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요

    def solution(num_list):
    p =1
    if len(num_list)>=11:
    s = sum(num_list)
    return s
    else:
    for i in num_list:
    p *= i
    return p

     
    남의 답
    def solution(num_list):
    if len(num_list) >= 11:
    return eval('+'.join(list(map(str, num_list))))
    else:
    return eval('*'.join(list(map(str, num_list))))
    1. solution 함수는 숫자 목록 num_list를 입력으로 사용합니다.
    2. 조건 if len(num_list) >= 11:은 num_list의 길이가 11보다 크거나 같은지 확인합니다. 이 조건이 참이면 목록에 11개 이상의 요소가 있음을 의미합니다.
    3. '+'.join(list(map(str, num_list))) 행에서 map(str, num_list)는 str 함수를 사용하여 num_list의 각 요소를 문자열로 변환합니다. 결과 문자열은 join 기능을 사용하여 '+' 구분 기호를 사용하여 결합됩니다. 이렇게 하면 '+'로 결합된 모든 요소가 포함된 문자열이 생성됩니다.
    4. eval 함수는 결과 문자열 표현식을 Python 표현식으로 평가하는 데 사용됩니다. 이 경우 문자열로 표시된 숫자에 대해 더하기를 수행합니다. 예를 들어 num_list가 [1, 2, 3]이면 '1+2+3' 표현식은 6으로 평가됩니다.
    5. num_list의 길이가 11보다 작으면(즉, 2단계의 조건이 거짓인 경우) else 블록 뒤에 코드가 이어집니다.
    6. '*'.join(list(map(str, num_list))) 행에서 3단계와 유사한 프로세스가 수행되지만 요소는 '*' 구분 기호를 사용하여 조인됩니다. 이렇게 하면 '*'로 결합된 모든 요소가 포함된 문자열이 생성됩니다.
    7. 그런 다음 문자열로 표현된 숫자에 곱셈을 수행하는 'eval'을 사용하여 결과 문자열 표현식을 평가합니다. 예를 들어 num_list가 [1, 2, 3]이면 '1*2*3' 표현식은 6으로 평가됩니다.
    8. 최종 결과는 solution 함수에 의해 반환됩니다.

    요약하면 코드는 num_list의 길이를 확인하고 목록의 길이에 따라 요소에 대해 더하기 또는 곱하기를 수행합니다. eval 함수는 결과 문자열 표현식을 Python 표현식으로 평가하는 데 사용됩니다.

     

     

    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    • 부분 문자열인지 확인하기
    문제 설명

    부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다. 예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다.

    문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.

    내답 - 넘 어렵게 풀었다. 

     

    my_string, target = input("전체, 부분 ").split()


    for i in range(len(my_string)):
    if my_string[i:i+len(target)] == target:
    result = 1
    break
    else:
    result = 0

    print(result)
    def solution(my_string, target):
    for i in range(len(my_string)):
    if my_string[i:i+len(target)] == target:
    return 1
    return 0
     
    남들 답
     

    def solution(my_string, target):
    return int(target in my_string)
     
     
    $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    참고 사항 
    answer = int('abcd' in 'abc')
    print(answer)
     
    ('abcd' in 'abc') 이 맞으면 True ->1 , 틀리면 False->0
     
     
    나와 비슷한 답
    그러나 pop(0)을 처음 봤다 그래서 그걸 공부했다
     
    def solution(my_string, target):
    answer = 0

    my_string2 = list(my_string)

    for i in range(len(my_string)):
    if my_string2[:len(target)] == list(target):
    return 1
    my_string2.pop(0)

    return answer


    1. answer 변수를 0으로 초기화합니다.
    2. my_string을 리스트로 변환하여 my_string2에 저장합니다.
    3. for 루프를 사용하여 my_string의 각 위치에서 시작하는 부분 문자열을 확인합니다.
    4. my_string2의 첫 번째 문자부터 target의 길이만큼을 리스트로 변환한 것이 target과 일치하는지 확인합니다.
    5. 일치하는 부분 문자열이 발견되면 함수는 1을 반환하여 target이 my_string의 부분 문자열임을 나타냅니다.
    6. my_string2에서 첫 번째 문자를 제거하여 다음 위치의 부분 문자열을 확인할 수 있도록 합니다.
    7. for 루프가 종료될 때까지 일치하는 부분 문자열이 발견되지 않으면 함수는 answer 변수의 값을 유지한 채로 반환합니다.

    이 코드는 for 루프와 리스트 조작을 통해 target이 my_string의 부분 문자열인지 확인하는 방식으로 구현되었습니다.

     

    코드의 my_string2.pop(0) 함수는 my_string2 목록에서 첫 번째 요소를 제거하고 반환하는 데 사용됩니다.

    이 특정 코드에서 my_string2는 입력 문자열 my_string의 목록 표현입니다. pop(0)을 사용하면 목록의 첫 번째 요소(문자열의 첫 번째 문자에 해당)가 제거되고 반환됩니다. 이 작업은 루프의 각 반복에서 슬라이딩 윈도우를 오른쪽으로 한 문자씩 이동하는 것을 시뮬레이트합니다. 각 위치에서 시작하는 my_string의 현재 하위 문자열이 target 문자열과 일치하는지 확인할 수 있습니다.

     

    pop() 메서드의 사용법

    예제 1: 목록에서 첫 번째 요소 제거 및 검색

    my_list = [10, 20, 30, 40, 50]
    first_element = my_list.pop(0)
    print(first_element)  # Output: 10
    print(my_list)  # Output: [20, 30, 40, 50]

     

    예제 2: 목록에서 요소 이동

    my_list = ['apple', 'banana', 'orange']
    first_item = my_list.pop(0)
    my_list.append(first_item)
    print(my_list)  # Output: ['banana', 'orange', 'apple']

     

    예 3: 루프에서 pop()을 사용하여 요소 처리

    my_list = ['a', 'b', 'c', 'd', 'e']
    while my_list:
        item = my_list.pop(0)
        print(item)

    결과값

    a
    b
    c
    d
    e

    각 예에서 pop(0)은 목록의 첫 번째 요소를 제거하고 반환하는 데 사용됩니다. 이 작업은 인덱스 0에서 요소를 제거하고 나머지 요소를 이동하여 간격을 채우는 방식으로 목록을 수정합니다.

     

    •  
    •  
    •  
    • 문제 설명 
    • 문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.
    •  
    • def solution(my_string, k):
          a = []
          for _ in range(k):
              a.append(my_string)
          b = ''.join(a)
          
          answer = b
    •     return answer
    def solution(my_string, target):
    for i in range(len(my_string)):
    if my_string[i:i+len(target)] == target:
    return 1
    return 0
    def solution(my_string, target):
    for i in range(len(my_string)):
    if my_string[i:i+len(target)] == target:
    return 1
    return 0

     

    다른 사람 풀이

    ₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩

    1
     
    def solution(my_string, k):
    return my_string*k
    ₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩
    2
     
    s, n = input("Enter a string and the number of repetitions: ").split()
    n = int(n)
    print(s * n)
    1. input("문자열과 반복 횟수 입력: "): 공백으로 구분된 문자열과 반복 횟수를 입력하라는 메시지가 표시됩니다.
    2. split(): 공백을 구분 기호로 사용하여 사용자 입력을 별도의 문자열로 분할하고 구분된 값 목록을 반환합니다.
    3. s, n = ...: 분해 할당을 사용하여 분할 입력의 첫 번째 요소를 변수 s(문자열)에 할당하고 두 번째 요소를 변수 n(정수)에 할당합니다.
    4. n = int(n): 문자열 n을 정수로 변환합니다.
    5. print(s * n): 문자열 s를 n번 반복하여 인쇄하여 문자열 n을 반복하는 원하는 결과를 얻습니다.
     
    • 나머지가 1이 되는 수 찾기
     
    문제 설명

    자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

    내답

    def solution(n):
    for i in range(1, n+1):
    if n % i == 1:
    answer = i
    return answer
    break
     
    남의 답

    def
    solution(n):
    return [x for x in range(1,n+1) if n%x==1][0]
     
    • 배열에서 문자열 대소문자 변환하기
    문제 설명

    문자열 배열 strArr가 주어집니다. 모든 원소가 알파벳으로만 이루어져 있을 때, 배열에서 홀수번째 인덱스의 문자열은 모든 문자를 대문자로, 짝수번째 인덱스의 문자열은 모든 문자를 소문자로 바꿔서 반환하는 solution 함수를 완성해 주세요.

    남의 답

    def solution(strArr):
    return [s.lower() if i % 2 == 0 else s.upper() for i, s in enumerate(strArr)]
     
    내답

    def solution(strArr):
    for i in range(len(strArr)):
    if i % 2 == 0:
    strArr[i] = strArr[i].lower()
    else:
    strArr[i] = strArr[i].upper()
     
    return strArr


    • 원소들의 곱과 합
    문제 설명

    정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

     

    나의 오답

    def solution(num_list):
    multi =1
    sum =0
    sum_square = sum*sum
    for i in range(len(num_list)):
    multi *=num_list[i]
    sum +=num_list[i]
     
    if multi < sum_square :
    return 1
    else:
    return 0
     

    공부한 후

    def solution(num_list):
    multi = 1
    sum_val = 0
     
    for num in num_list:
    multi *= num
    sum_val += num
     
    sum_square = sum_val * sum_val
     
    if multi < sum_square:
    return 1
    else:
    return 0

    ₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩

    sum_square = sum_val * sum_val  - 순서가 중요 !!!!

     

    남의 답 - 멋있는 답

    def solution(num_list):
    s=sum(num_list)**2
    m=eval('*'.join([str(n) for n in num_list]))
    return 1 if s>m else 0
    ₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩₩
    다른 참고 답
    def solution(num_list):
    a=1
    b=0
    for x in num_list:
    a*=x
    b+=x
    if a<b*b: return 1
    return 0
    다른 답

    def solution(num_list):
    mul = 1
    for n in num_list:
    mul *= n
    return int(mul < sum(num_list) ** 2)
     
     
     'enumerate()' 함수

    Python의 'enumerate()' 함수는 시퀀스(예: 목록, 튜플 또는 문자열)를 반복하고 반복하는 동안 각 요소와 함께 인덱스 값을 제공하는 데 사용됩니다. 튜플의 반복자를 반환하며 각 튜플에는 인덱스와 시퀀스의 해당 요소가 포함됩니다.

    enumerate()`의 일반 구문은 다음과 같습니다.

    enumerate(sequence, start=0)
     
    * 반복할 시퀀스입니다
     *start (선택사항): 열거를 시작할 인덱스 값. 기본적으로 0부터 시작합니다.

    다음은 enumerate()의 작동 방식을 보여주는 예입니다.

    fruits = ['apple', 'banana', 'mango']

    for index, fruit in enumerate(fruits):
    print(index, fruit)
     
    결과 값  - 인덱스랑 벨류값이랑 함께 나온다 %%%중요
    0 apple
    1 banana
    2 mango
     

    이 예에서 enumerate() 함수는 fruits 목록을 반복하는 데 사용됩니다. 각 반복에서 인덱스와 해당 과일을 포함하는 튜플을 반환합니다. 그런 다음 루프는 튜플을 루프 내에서 사용할 수 있는 변수 index 및 fruit로 압축을 풉니다. 이렇게 하면 시퀀스를 반복하면서 인덱스와 요소에 동시에 액세스할 수 있습니다.

    enumerate()를 사용하면 특정 요소의 위치를 ​​찾거나 인덱스 값을 기반으로 일부 작업을 수행하려는 경우와 같이 시퀀스를 반복하는 동안 인덱스를 추적해야 할 때 유용할 수 있습니다.

Designed by Tistory.