프로그래머스 level0 파이썬 복기

728x90

문제1) split() 함수 (문자열 슬라이스)

문자열 str과 정수 n이 주어집니다.
str이 n번 반복된 문자열을 만들어 출력하는 코드를 작성해 보세요.

 

예시)

입력: string 5

출력: stringstringstringstringstring (string 5개)

 

풀이)

a, b = input().strip().split(' ') # 띄어쓰기 기준으로 문자열과 횟수를 분리
b = int(b) 횟수를 int형으로 변경
c = a # 문자열1개를 선언
for _ in range(b-1): # 횟수 -1 개를 반복 -> 첫번째 문자열을 이미 선언 했기때문에
    c += a # 반복해서 같은 문자열을 붙임
   
print(c)

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

문제2) swapcase() 함수 (문자 대소문자 변경)

영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

 

예시)

입력: aBcDeFg

출력: AbCdEfG

 

풀이)

str = input() # 입력값 받음

print(str.swapcase()) # 대소문자를 변경하는 함수

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

문제3) 집합 사용

1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.

세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

풀이)

def solution(a, b, c):
    check=len(set([a,b,c])) # 집합으로 중복검사
    if check==1:
        return 3*a*3*(a**2)*3*(a**3)
    elif check==2:
        return (a+b+c)*(a**2+b**2+c**2)
    else:
        return (a+b+c)

 

문제4) zip()함수, 딕셔너리 사용

정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

 

풀이)

def solution(n, control):
    key = dict(zip(['w','s','d','a'], [1,-1,10,-10])) #zip으로 묶어서 사전형으로 변환
    return n + sum([key[c] for c in control]) # 문자열을 반복하면서 key값에 따른 value값의 합 + 기본 n값

 

문제5) zip()함수, 딕셔너리 사용

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

 

예시)

입력: numLog : [0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1]

결과: "wsdawsdassw"

 

풀이)

def solution(numLog):
        
    answer = ''
    key = dict(zip([1,-1,+10,-10],['w','s','d','a']))
    
    for i in range(1,len(numLog)):
        answer+=key[numLog[i] - numLog[i-1]]
    
    return answer

문제6) 파이썬 함수의 특징 사용-> 리스트를 다수의 변수로 만들기

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

예시)

arr = [0, 1, 2, 3, 4]

queries = [[0, 3],[1, 2],[1, 4]]

result = [3, 4, 1, 0, 2]

 

풀이)

def solution(arr, queries):
    
    for index in range(len(queries)):
        i,j = queries[index]
        arr[i],arr[j] = arr[j],arr[i]
        
    return arr

문제7) 리스트 컴프리헨션,min()  함수 사용

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

 

예시)

arr = [0, 1, 2, 4, 3]

queries = [[0, 4, 2],[0, 3, 2],[0, 2, 2]]

result = [3, 4, -1]

 

풀이)

def solution(arr, queries):
    answer = []
    for s, e, k in queries:
        temp_list = [i for i in arr[s:e+1] if i > k]
        answer.append(-1 if len(temp_list) == 0 else min(temp_list))
    return answer

문제8) range() 함수 사용(범위)

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

예시)

arr = [0, 1, 2, 4, 3]

queries = [[0, 4, 1],[0, 3, 2],[0, 3, 3]]

result = [3, 2, 4, 6, 4]

 

풀이)

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

문제9) all()함수 사용(iterable한 값을 반복하여 특정값에 대한 조건이 모두 일치할때 True 반환)

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.

 

예시)

l = 5, r = 555 일때 결과값 : [5, 50, 55, 500, 505, 550, 555]

l = 10, r = 20 일때 결과값 : [-1]

 

풀이) 

def solution(l, r):
    answer = []
    for num in range(l, r + 1):
        # 숫자를 문자열로 변환
        num_str = str(num)
        # '0'과 '5'만 포함하는지 확인
        if all(c == '0' or c == '5' for c in num_str):
            answer.append(num)
    
    if len(answer) ==0:
        answer.append(-1)
    return answer