🗓️ 기간: 6/16 ~ 6/22 (5주차)
28. 없는 숫자 더하기 (6/16)
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
def solution(numbers):
answer = sum(i for i in range(0,10) if i not in numbers)
return answer
29. 제일 작은 수 제거하기 (6/17)
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
def solution(arr):
arr.remove(min(arr))
return arr if arr else [-1]
리스트에서 특정 값을 제거해주는 메서드인 remove( )를 사용하여 가장 작은 수를 제거해준다.
30. 가운데 글자 가져오기 (6/18)
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
def solution(s):
i = len(s) // 2
if len(s) % 2 == 0:
answer = s[i-1:i+1]
else:
answer = s[i]
return answer
단어의 길이가 각각 홀/짝수일 때 슬라이싱을 이용해 원하는 위치의 문자열을 반환해준다. 예를 들어, s가 "abcde" 일 경우 "c"를 반환하고, ""qwer"일 경우 "we"를 반환한다.
31. 수박수박수박수박수박수? (6/19)
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
def solution(n):
return''.join('수' if i % 2 == 0 else '박' for i in range(n))
i가 짝수일 때는 '수'를, 홀수일 때는 '박'을 리턴하여 문자열 리스트를 만들고 join( ) 을 사용해 요소들을 하나의 문자열로 이어 붙여준다.
def solution(n):
return''.join('수박'[i%2] for i in range(n))
if-else 를 사용하지 않고 i % 2 를 '수박' 에 인덱스로 넣을 수도 있다.
32. 내적 (6/20)
길이가 같은 두 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의 길이)
def solution(a, b):
return sum(i * j for i,j in zip(a,b))
이전에 풀었던 문제에서 zip( )을 사용하여 리스트 요소들끼리 곱하는 방법을 배워서 그대로 적용하였다.
33. 약수의 개수와 덧셈 (6/21)
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
def solution(left, right):
answer = 0
for i in range(left, right+1):
divisor = [j for j in range(1,i+1) if i % j ==0]
if len(divisor) % 2 == 0:
answer += i
else:
answer -= i
return answer
어떤 수의 약수를 다 구한 다음 개수를 세서 if문을 사용했다. 아래처럼 수학적 원리를 사용하면 좀 더 간단하게 만들 수도 있다.
def solution(left, right):
answer = 0
for i in range(left, right+1):
if int(i ** 0.5) == i ** 0.5:
answer -= i
else:
answer += i
return answer
어떤 수의 약수의 개수가 홀수인 경우는 "제곱수"일 때만 해당한다는 개념을 사용하여 if int(i ** 0.5) == i ** 0.5 라는 조건문을 만들어서 더 간단하게 풀 수 있다.
34. 문자열 내림차순으로 배치하기 (6/22)
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
def solution(s):
return ''.join(sorted(s, reverse=True))
기본적으로 sorted 함수는 문자열을 알파벳 순으로 정렬하되 대문자가 소문자보다 앞에 정렬된다. 이때 문자를 큰 순으로 소문자부터 정렬하려면 reverse=True로 설정하면 된다. str 타입의 s를 sorted()를 하게되면 list type으로 바뀌게 되므로, 그래서 join함수를 이용해서 list type을 다시 str 타입으로 변경해야 한다.
'코드카타 > 알고리즘' 카테고리의 다른 글
[ 코드카타 ] 알고리즘 | 42~48번 (1) | 2025.07.07 |
---|---|
[ 코드카타 ] 알고리즘 | 35~41번 (0) | 2025.06.30 |
[ 코드카타 ] 알고리즘 | 21~27번 (0) | 2025.06.15 |
[ 코드카타 ] 알고리즘 | 14~20번 (0) | 2025.06.08 |
[ 코드카타 ] 알고리즘 | 7~13번 (0) | 2025.06.03 |