728x90
1. 문자열 밀기
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
def solution(A, B):
return (B * 2).find(A)
한칸 씩 밀어 가능한 문자 == B를 반복했을 때 B에 A가 포함이되어야 함
find() 함수를 사용하면 문자열이 포함되어 있을 때, 첫 번째 문자열의 위치를 반환한다.
2. 다항식 더하기
한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.
def solution(polynomial):
x, n = 0, 0
for i in polynomial.split(' + '):
if i.isdigit():
n += int(i)
else:
x = x+1 if i == 'x' else x + int(i[:-1])
if x == 0:
return str(n)
elif x == 1:
return 'x + '+str(n) if n !=0 else 'x'
else:
return f'{x}x + {n}' if n !=0 else f'{x}x'
- x항과(x) 상수항을(n) 0으로 초기화한다.
- split을 통해 공백과 '+' 문자를 기준으로 문자열을 리스트로 분리한다.
- for문으로 리스트의 요소를 하나씩 가져오면서 요소가 상수면 n에 더한다.
- 요소가 x항일 때, x에 숫자가 없을 경우 1을 더하고 숫자가 있을 경우 숫자만 분리하여 더한다.
(마지막 인덱스가 'x' 이기때문에 [:-1]을 할 경우 숫자만 분리 됨)
- 이때 x가 0인 경우와, 1인경우와 그렇지 않은 경우를 분리하여 값을 반환한다.
3. 최빈값 구하기
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
def solution(array):
set0 = list(set(array))
arr0 = [array.count(i) for i in set0]
if arr0.count(max(arr0)) == 1:
return set0[arr0.index(max(arr0))]
return -1
- array -> set으로 타입 변환을 하여 중복제거를 해준다
- 중복제거를 하지 않을 시 count를 하면 array의 요소만큼 count 개수가 저장되기 때문에, 판별이 힘들다.
- 중복제거를 한 set0의 요소들을 기존 array에서 count 해준다.
- 만약 max(arr0)의 count가 1일 경우 최빈값이 하나라는 말이기때문에, set0의 인덱스의 위치를 찾아 반환한다.
- count가 2일 경우 최빈값이 여러개이기 때문에, -1을 반환한다.
4. OX퀴즈
덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.
import re
def solution(quiz):
for idx, ch in enumerate(quiz):
quiz[idx] = re.sub(r'[=]', '==', ch)
result = []
for i in quiz:
result.append("O") if eval(i) else result.append("X")
return result
re 함수를 통해 문자 '=' 를 '==' 로 치환한다.
그 후 빈 리스트를 초기화 한 후 eval 함수를 통해 true 면 O를 False면 X를 빈 리스트에 더한다.
다만 eval은 앞선 포스팅에서 언급했듯이, 보안적으로 취약하기 때문에 사용을 자제하는 함수다.
아래처럼 리스트 컴프리헨션을 통해 한줄로 반환도 가능하다.
return ["O" if eval(i) else "X" for i in quiz]
5. 다음에 올 숫자
등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.
def solution(common):
#등차수열
if common[1] - common[0] == common[-1] - common[-2]:
return common[-1] + (common[1] - common[0])
#등비수열
else:
return common[-1] * (common[1] // common[0])
6. 분수의 덧셈
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2
가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
import math
def solution(n1, d1, n2, d2):
numer = n2*d1 + n1*d2
denom = d1*d2
gcd = math.gcd(denom, numer)
return [numer//gcd, denom//gcd]
- a/b + c/d = (a*d + b*c)/b*d
7. 연속된 수의 합
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과
total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
def solution(num, total):
return [(total - (num * (num - 1) // 2)) // num + i for i in range(num)]
반응형
'🧾 Codetest > 프로그래머스' 카테고리의 다른 글
[프로그래머스][SQL][Lv02] 조건에 맞는 개발자 찾기(&) (0) | 2024.03.08 |
---|---|
[프로그래머스][Python][Lv0] 코딩테스트 입문 (5) (1) | 2023.09.14 |
[프로그래머스][Python][Lv0] 코딩테스트 입문 (3) (0) | 2023.09.05 |
[프로그래머스][Python][Lv0] 코딩테스트 입문 (2) (0) | 2023.09.04 |
[프로그래머스][Python][Lv0] 코딩테스트 입문 (1) (0) | 2023.09.02 |