230127
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
제한사항
0 ≤ numbers의 원소 ≤ 1,000
1 ≤ numbers의 길이 ≤ 100
정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
입출력 예
numbers | result |
---|---|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | 5.5 |
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] | 94.0 |
import numpy as np
def solution(numbers):
return np.mean(numbers)
230127
문제 설명
문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ strlist 원소의 길이 ≤ 100
strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.
입출력 예
strlist | result |
---|---|
["We", "are", "the", "world!"] | [2, 3, 3, 6] |
["I", "Love", "Programmers."] | [1, 4, 12] |
def solution(strlist):
answer = []
for i in range(0,len(strlist)):
answer.append(len(strlist[i]))
return answer
ㅎ..
#1
def solution(strlist):
answer = list(map(len, strlist))
return answer
#2
def solution(strlist):
answer =[]
for i in strlist:
answer.append(len(i))
return answer
#3
def solution(strlist):
return [len(str) for str in strlist]
#1) 아하 for문대신 map을 이용하면 되구나
배열의 모든 요소를 변환시키기 위해서는 앞으로 map을 써봐야겠다.
#2), #3) 내가 푼 방법에서 조금 개선된 방법이라고 생각한다. 이런 식으로 쓰도록 해봐야겠다.
230127
문제 설명
정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ num_list의 길이 ≤ 1,000
0 ≤ num_list의 원소 ≤ 1,000
def solution(num_list):
return list(reversed(num_list))
#1
def solution(num_list):
return num_list[::-1]
#2 reverse
def solution(num_list):
num_list.reverse()
return num_list
#1) 이야..간단하다..인덱스 호출로 문자열 순서 바꾸는 거 좋다
이걸로 기억하고 있어야겠다.
230127
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ my_string의 길이 ≤ 1,000
def solution(my_string):
return my_string[::-1]
이야 말하기가 무섭게 바로 또 뒤집기다. 아주 좋은 방법이다.
230129
문제 설명
머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.
제한사항
1 ≤ array의 길이 ≤ 100
1 ≤ height ≤ 200
1 ≤ array의 원소 ≤ 200
입출력 예
array | height | result |
---|---|---|
[149, 180, 192, 170] | 167 | 3 |
[180, 120, 140] | 190 | 0 |
def solution(array, height):
return len([*filter(lambda x: x > height, array)])
#return len(list(filter(lambda x: x >= height, array)))
어떻게 하면 효율적으로 풀 수 있을까 고민하다가 생각한 것은 filter였고
filter 첫 번째 매개변수에 함수를 넣어야하는데 정의하는 건 오히려 복잡해진다고 생각했다. 그러다 발견하게 된 것이 lambda였다.
[*]는 구글링하다 알게 되었고 python에서의 *은 정말 기능이 다양하게 쓰인다는 것을 알게 되었다.
그 중 unpacking 역할을 함을 알 수 있었다.
[*]를 써서 list 형태로 만들어 주었다. 물론 주석에 적은 것처럼 써도 된다.
arr = [1, 2, 3, 4.5, 3.2]
#isinstance: 타입 확인
print(list(filter(lambda x: isinstance(x, int), arr)))
#결과: [1, 2, 3]
print(list(filter(lambda x: isinstance(x, float), arr)))
#결과: [4.5, 3.2]
#배열 안에 넣어서 푼 풀이
def solution(array, height):
array.append(height)
array.sort(reverse=True)
return array.index(height)
230129
문제 설명
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
2 ≤ numbers의 길이 ≤ 30
0 ≤ numbers의 원소 ≤ 1,000
0 ≤num1 < num2 < numbers의 길이
입출력 예
numbers | num1 | num2 | result |
---|---|---|---|
[1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
[1, 3, 5] | 1 | 2 | [3, 5] |
def solution(numbers, num1, num2):
return numbers[num1:num2+1]
230129
문제 설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
-10,000 ≤ numbers의 원소 ≤ 10,000
1 ≤ numbers의 길이 ≤ 1,000
def solution(numbers):
return list(map(lambda x: x*2 ,numbers))
배열 원소의 길이 풀 때 봤던 것을 사용해봤다.
def solution(numbers):
return [num*2 for num in numbers]
이것도 배열 원소의 길이 풀 때 봤던 거다! 다음엔 이걸 사용해봐야겠다.
230130
문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
3 ≤ numbers의 길이 ≤ 20
direction은 "left" 와 "right" 둘 중 하나입니다.
입출력 예
numbers | direction | result |
---|---|---|
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
def solution(numbers, direction):
right = numbers[-1]
left = numbers[0]
if direction == "right":
numbers.remove(right)
numbers.insert(0, right)
else:
numbers.remove(left)
numbers.append(left)
return numbers
ㅎ...핫
from collections import deque
def solution(numbers, direction):
numbers = deque(numbers)
numbers.rotate(1 if direction == 'right' else -1)
return list(numbers)
와 왜 문제푸는 동안 rotate 아무도 안 알려줬지?
from collections import deque를 통해 모듈을 불러오고
deque()로 자료형바꾸고 rotate()함수를 이용하면 회전된다.
함수안에 음수를 넣으면 왼쪽을 회전하고
양수를 넣으면 오른쪽으로 회전한다.
숫자가 1이면 한 번 회전 2이면 두 번 회전한다.
230207
문제 설명
두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ s1, s2의 길이 ≤ 100
1 ≤ s1, s2의 원소의 길이 ≤ 10
s1과 s2의 원소는 알파벳 소문자로만 이루어져 있습니다
s1과 s2는 각각 중복된 원소를 갖지 않습니다.
입출력 예
s1 | s2 | result |
---|---|---|
["a", "b", "c"] | ["com", "b", "d", "p", "c"] | 2 |
["n", "omg"] | ["m", "dot"] | 0 |
def solution(s1, s2):
count = 0
for i in s1:
for j in s2:
if i == j:
count += 1
return count
이렇게 했다가
def solution(s1, s2):
return sum(1 for i in s1 for j in s2 if i == j)
이렇게 고쳤다. 사실 그게 그거긴 해
def solution(s1, s2):
return len(set(s1)&set(s2));
뭔데
set이용해서 푸는 거 처음봤다.
각각을 set을 이용해 {}형태로 한 후 교집합을 하여 겹치는 원소를 구한다.
이후 len함수를 통해 개수를 구해줘 배열의 유사도를 구할 수 있다!
여기서는 중복과 관련이 없어서 set을 이용할 수 있었는데 만약 s2에 s1에 있는 중복된 값이 하나 더 있었다면? 이건 이용할 수 없겠지
set은 Python 내장 함수이며 중복되지 않은 원소(unique)를 갖기 위해 사용된다.
set은 연산자를 활용할 수 있는데,
합집합: |
교집합: &
차집합: -
대칭차집합(합집합 - 교집합): ^
(참고: https://aigong.tistory.com/30)