05 Mar 2017
|
알고리즘
프로그래밍
level 1. 평균구하기
출처
문제
def average(list):
함수를 완성해서 매개변수 list의 평균값을 return하도록 만들어 보세요.
어떠한 크기의 list가 와도 평균값을 구할 수 있어야 합니다.
풀이 (python)
def average(list):
v = 0
for i in list:
v = v + i
return v / len(list)
# 아래는 테스트로 출력해 보기 위한 코드입니다.
list = [5,3,4]
print("평균값 : {}".format(average(list)));
#풀이1 - ZeroDivisionError 예외처리 필요
def average(list):
return sum(list) / len(list) # sum() - O(N) 시간복잡도
#풀이2 - ZeroDivisionError 예외처리
def average(list):
if not len(list):
return 0
return sum(list) / len(list)
#풀이3 - reduce, lambda
from functools import reduce
def average(list):
return reduce(lambda x,y: x+y) / len(list)
다른사람 풀이
def average(list):
return (sum(list) / len(list))
배운점
- sum 함수를 사용하면 리스트 각 요소들의 총 합을 구할 수 있구나!
풀이 1 (java)
public class GetMean {
public int getMean(int[] array) {
int sum = 0;
for (int e : array) {
sum += e;
}
return sum / array.length;
}
public static void main(String[] args) {
int x[] = {5, 4, 3};
GetMean getMean = new GetMean();
System.out.println("평균값 : " + getMean.getMean(x));
}
}
풀이 2 (java)
import java.util.stream.*;
public class GetMean {
public int getMean(int[] array) {
int sum = IntStream.of(array).sum();
return sum / array.length;
}
public static void main(String[] args) {
int x[] = {5, 4, 3};
GetMean getMean = new GetMean();
System.out.println("평균값 : " + getMean.getMean(x));
}
}
배운점
- java.util.stream 패키지를 통해서 array의 합계를 구할 수 있다.
04 Mar 2017
|
알고리즘
프로그래밍
level 1. x만큼 간격이 있는 n개의 숫자
출처
문제
number_generator함수는 x와 n을 입력 받습니다.
2와 5를 입력 받으면 2부터 시작해서 2씩 증가하는 숫자를 5개 가지는 리스트를 만들어서 리턴합니다.
[2,4,6,8,10]
4와 3을 입력 받으면 4부터 시작해서 4씩 증가하는 숫자를 3개 가지는 리스트를 만들어서 리턴합니다.
[4,8,12]
이를 일반화 하면 x부터 시작해서 x씩 증가하는 숫자를 n개 가지는 리스트를 리턴하도록 함수 number_generator를 완성하면 됩니다.
풀이 (python)
python
# 풀이 1
def number_generator(x, n):
result = [x]
for i in range(2, n+1):
result.append(x * i)
return result
# 풀이 2 - list comprehension 활용
def number_generator(x, n):
return [x*i for i in range(1, n+1)]
# 풀이 3 - list() 함수 활용
def number_generator(x, n):
return list(range(x, x*n+1, x))
03 Mar 2017
|
알고리즘
프로그래밍
level 1. 행렬의 덧셈
출처
문제
numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 매개변수로 입력받습니다.
s에 ‘p’의 개수와 ‘y’의 개수를 비교해 같으면 True, 다르면 False를 리턴하도록 함수를 완성하세요.
‘p’, ‘y’ 모두 하나도 없는 경우는 항상 True를 리턴합니다.
예를들어 s가 “pPoooyY”면 True를 리턴하고 “Pyy”라면 False를 리턴합니다.
풀이 (python, Javascript)
python
def numPY(s):
s = s.lower()
p_list = []
y_list = []
if 'p' in s or 'y' in s:
for v in s:
if v == 'p':
p_list.append(v)
elif v == 'y':
y_list.append(v)
else:
pass
return len(p_list) == len(y_list)
else:
return True
Javascript
function numPY(s){
var result = false;
var p = /p/gi;
var y = /y/gi;
if ((s.match(p).length === s.match(y).length) || (s.match(p), s.match(y) === null)){
result = true;
}
return result;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( numPY("pPoooyY") )
console.log( numPY("Pyy") )
다른사람 풀이
python
def numPY(s):
return s.lower().count('p') == s.lower().count('y')
Javascript
function numPY(s) {
return s.match(/p/ig).length == s.match(/y/ig).length;
}
느낀 점
자바스크립트
파이썬
26 Feb 2017
|
알고리즘
프로그래밍
level 1. 행렬의 덧셈
출처
문제
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행,같은 열의 값을 서로 더한 결과가 됩니다.
2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환해 주세요.
예를 들어 2x2 행렬인 A = ((1, 2), (2, 3)), B = ((3, 4), (5, 6)) 가 주어지면,
같은 2x2 행렬인 ((4, 6), (7, 9))를 반환하면 됩니다.
(어떠한 행렬에도 대응하는 함수를 완성해주세요.)
느낀 점
자바스크립트
- 2차원 배열을 만드는 것이 어려웠다. (
answer[i] = [] 으로 빈 배열 속 배열을 만든다)
- .map() 메소드를 잘 활용하자. 참고
- 화살표 함수에 익숙해지자.참고
파이썬
list comprehension을 활용하면 원하는 리스트 만들기가 정말 편하다.
zip을 활용해서 2개 이상의 리스트를 활용해서 원하는 리스트를 만들 수 있다.
- 2차원 리스트를 만드는 것이 어려웠다.
(answer = [[] for j in range(len(A))] 으로 리스트 A 길이만큼의 2차원 리스트를 만든다.)
- 리스트의의 길이만큼 반복하려면
for j in range(len(A)) 를 사용한다.
- 빈 2차원 리스트에 값을 넣으려면
a[0].append(1)를 사용한다. (a[0][0] = 1는 IndexError 발생)
풀이 (python, Javascript)
python - 풀이 1
def sumMatrix(A,B):
answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
return answer
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
python - 풀이 2
def sumMatrix(A,B):
answer = [[] for j in range(len(A))]
for i in range(len(A)):
for x in range(len(A[i])):
answer[i].append(A[i][x] + B[i][x])
return answer
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
Javascript
function sumMatrix(A,B){
var answer = Array();
for(var i = 0; i < A.length; i++){
answer[i] = [];
for(var j = 0; j < A[i].length; j++){
answer[i][j] = A[i][j] + B[i][j];
}
}
return answer;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
다른사람 풀이
python
def sumMatrix(A,B):
answer = [[A[i][j] + B[i][j] for j in range(len(A[0]))] for i in range(len(A))]
return answer
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [3,4]], [[3,4],[5,6]]))
Javascript
function sumMatrix(A,B){
return A.map((a,i) => a.map((b, j) => b + B[i][j]));
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
// 화살표 함수를 풀어 쓴 코드
function sumMatrix(A,B){
return A.map(function(a, i){
return a.map(function(b, j){
return b + B[i][j]
})
})
}