1. 나누어 떨어지는 숫자 배열
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
- arr은 자연수를 담은 배열입니다.
- 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
- divisor는 자연수입니다.
- array는 길이 1 이상인 배열입니다.
나의 풀이
def solution(arr, divisor):
result = []
for i in arr:
if i%divisor == 0:
result.append(i)
if len(result) == 0:
result.append(-1)
result.sort()
return result
다른사람 풀이 + 개선점
def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1]
리스트 내 for 문을 통해 if 문을 통한 나누어 떨어지는 수를 포함하는 리스트 생성 및 sorted() 함수를 통해 오름차순 정렬
리스트 내 값이 없으면 false 처리되기 때문에 or로 리스트 내 값이 없는 경우 [-1] 출력
2. 제일 작은 수 제거하기
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
나의 풀이
def solution(arr):
arr.remove(min(arr))
return arr or [-1]
3. 내적
문제 설명
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
제한사항
- a, b의 길이는 1 이상 1,000 이하입니다.
- a, b의 모든 수는 -1,000 이상 1,000 이하입니다.
나의 풀이
def solution(a, b):
answer = 0
for i in range(len(a)):
answer += a[i]*b[i]
return answer
다른사람 풀이 + 개선점
def solution(a, b):
return sum([x*y for x, y in zip(a,b)])
비슷한 개념이지만 sum ( 리스트 ) 의 개념을 사용하여 더 간결하게 만들었다.
또한 for x , y in zip(a,b) 를 사용하여 인덱스 처리를 하지 않아도 된다.
zip : 두 리스트를 묶을 때 사용
4. 가운데 글자 가져오기
문제 설명
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
재한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.
나의 풀이
def solution(s):
import math
n = len(s)
if n%2 == 0:
return s[n//2-1 : n//2+1]
else:
return s[n//2]
몫을 구하는 // 연산자를 사용한다.
5자리의 문자열의 경우 index 2의 값이 필요하므로 몫 그대로,
4자리의 문자열의 경우 index 1,2의 값이 필요하므로 s [ 몫 -1 : 몫 + 1] 을 통해 가져온다.
다른사람 풀이 + 개선점
def string_middle(str):
return str[(len(str)-1)//2 : len(str)//2 + 1]
문자열의 길이가 홀수일때 , 예를 들어 5자리이면 str[2 : 3] 으로 결국 str[2] 값만 가져오게되고,
4자리 일때는 str [ 1 : 3] 으로 index 1 ,2의 값을 가져오게된다.
5. 문자열 내림차순으로 배치하기
문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
제한 사항
- str은 길이 1 이상인 문자열입니다.
나의 풀이
def solution(s):
return ''.join(sorted([i for i in s], reverse = True))
join을 사용하여 리스트형태로 reverse = True를 통해 내림차순 정렬한뒤 문자열로 다시 합쳐주었다.
다른사람 풀이 + 개선점
def solution(s):
return ''.join(sorted(s, reverse=True))
문자열 형태의 s를 sorted 내부에 넣게되면 리스트로 변경되게 되므로 위에서 내가 한 것과 같이 for문으로 리스트를 만들어줄 필요가 없다.
'프로그래머스' 카테고리의 다른 글
Python Lv1. k번째 수 외 5문제 (1) | 2024.10.02 |
---|---|
[프로그래머스] Python Lv.1 부족한 금액 계산하기 외 5문제 (4) | 2024.09.30 |
[프로그래머스] MySQL Level1 경기도에 위치하는 식품창고 목록 출력하기 ,물고기 문제 (Level1~3) (2) | 2024.09.05 |
[프로그래머스] Python Lv.1 콜라츠 추측 , 없는 숫자 더하기 , 수박수박수박수? (0) | 2024.08.16 |
[프로그래머스] Python Lv.1 가장 많이 받은 선물 (1) | 2024.01.08 |