-
파이썬 알고리즘 코딩 문제 풀기(programmers)Python 2024. 7. 16. 21:18
25. 나누어 떨어지는 숫자 배열
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
일단, 문제 그대로 for문을 돌면서 divisor로 나눴을 때 떨어지는 값들을 요소로 받는 리스트 valid_list를 생성했다.
if 문으로 divisor로 나누어 떨어지는 element가 하나도 없으면 [-1] 반환하는 코드를 추가하고
새로 만들어준 valid_list()를 오름차순으로 정렬한 후 반환해주면 끝
def solution(arr, divisor): # arr를 돌면서, i를 divisor로 나누었을때 딱 떨어지는 값 i 리스트 생성 valid_arrays = [i for i in arr if i % divisor == 0] if not valid_arrays: # 만약 나누어 떨어지는 요소가 없으면 return [-1] # -1 반환 valid_arrays.sort() # 오름차순 정렬 ( sort()메소드는 정렬을 할 뿐 None을 반환한다) return valid_arrays print(solution([5,9,7,10], 5)) print(solution([5,9,7], 10))
실행하면
[5, 10] [-1]
26. 음양 더하기
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
[제한사항]
absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
[입출력 예시]
- signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 return 해야 합니다.
그냥 단순하게, 만약 signs의 인덱스 i가 참이면 absolutes의 인덱스 i 값은 양수
아니면(else > 즉, signs의 인덱스 i 값이 거짓이면) absolutes의 인덱스 i 의 값은 음수. 그 담에 그 값들을 sum해서 반환해주면 된다.
def solution(absolutes, signs): # signs의 각 인덱스 값으로 요소를 판단해야하므로 for i in range(len(signs)): if signs[i]: # signs[i]가 True면 absolutes[i] = int(absolutes[i]) else: # if문의 조건이 False인 경우, 즉 signs[i]가 False absolutes[i] = -int(absolutes[i]) return sum(absolutes)
실행해보면
1 0
27. 핸드폰 번호 가리기
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
입출력 예
phone_number "01033334444" return "*******4444"
휴대폰 번호의 길이가 11이든 12이든 마지막 네자리수만 빼고 *로 반환해주면 되니까
1. phone_number의 길이인 len(phone_number)에서 -4를 뺀 수 만큼 "*"를 곱해서 표기하고
2. 거기에 폰번호 뒤 네자리만 이어붙여주면 된다. 마지막 문자열의 index는 -1 이므로 phone_number[-4:] 하면 된다.
def solution(phone_number): # phone_number의 길이를 구하고 4를 빼준 만큼 "*"를 곱해서 *로 표기하고 # phone_number의 마지막에서 네자리를 붙여준다. (-1은 index 맨 마지막 값) return "*" * (len(phone_number) - 4) + phone_number[-4:] print(solution("01033334444"))
실행해보면
*******4444
28. 없는 숫자 더하기
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.
입출력 예
numbers [5,8,4,0,6,7,9]
result 6 (1+2+3니까)
일단 0부터 9까지의 숫자 리스트 basic_numbers를 새로 만들었다.
그리고 i 가 basic_numbers를 돌면서 > numbers 리스트에 없는 값을 찾을때마다 > 그 값을 반환해서 더해주도록 했다.
def solution(numbers): basic_numbers = list(range(0, 10)) return sum(i for i in basic_numbers if i not in numbers) print(solution([5,8,4,0,6,7,9])) print(solution([3,4,5,8,0,6,7,9]))
실행해보면
6 3
29. 가장 작은 수 제어하기
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.
단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요.
예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
# arr [4,3,2,1] return [4,3,2]
# arr [10] return [-1]
음.. 일단 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴 -> 이거부터 if문으로 처음에 넣어주고
number의 가장 작은 값을 min으로 구해서 변수 min_number 에 새로 지정하고
i 가 numbers를 돌면서 min_number(가장 작은 값)이 아닌 값을 반환하도록 했다.
def solution(numbers): if len(numbers) == 1: return [-1] min_number = min(numbers) return list(i for i in numbers if i != min_number) print(solution([4,3,2,1])) print(solution([10]))
실행하면 잘 됨
[4, 3, 2] [-1]
'Python' 카테고리의 다른 글
파이썬 자료구조 알고리즘, 코딩테스트 문제, n번째 피보나치 수 구하기 (2) 2024.07.19 파이썬, 자료구조 알고리즘, is_pelindrome code (0) 2024.07.19 파이썬 자료구조 알고리즘, programmers 코딩 기초 트레이닝 (0) 2024.07.15 파이썬 알고리즘 초급 문제 (0) 2024.07.12 [파이썬, 자료구조 알고리즘] Stack (2) 2024.07.12