프로그래머스 배열 두배 만들기 (알고리즘)
Lv 0
문제 푸는건 5초 정리는 10분…
- 하루 시작은 알고리즘 한 문제 풀기로 시작
- 문제 -> https://school.programmers.co.kr/learn/courses/30/lessons/120809
Java
// 내가푼답 -> 오답 -> 배열크기에 대해서 몰랐음
class Solution {
public int[] solution(int[] numbers) {
int[] answer = {};
for (int i= 0 ; i < numbers.length; i++){
answer += add(new int[] {numbers[i] * 2});
}
return answer;
}
}
// 다시풀기
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int [numbers.length];
for(int i=0; i<numbers.length; i ++) {
answer[i] = numbers[i] *2;
}
return answer;
}
}
// 다른사람풀이
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers) {
return Arrays.stream(numbers).map(i -> i * 2).toArray();
}
}
정리
- 자바는 배열 크기를 초반에 정해줘야한다.
- length로 해결한 후 기본 논리 for문 실행하면 된다.
- Java8 에 Arrays.stream 을 사용하면 numbers를 순환한다.
- map 메소드는 스트림에서 나오는 데이터를 변경해준다.
- toArray로 형 변환을 해준다.
출처: https://hbase.tistory.com/171
Python
# 내가 푼 답
def solution(numbers):
answer = [];
for i in numbers:
t = i*2
answer.append(t)
return answer
# 다른 사람 풀이 1
def solution(numbers):
return [num*2 for num in numbers]
# 다른 사람 풀이 2
def solution(numbers):
return list(map(lambda x: x * 2, numbers))
정리
- 반복문을 사용할 때는 컴프리핸션을 떠올리도록 하자
JavaScript
// 내가 푼 답
function solution(numbers) {
var answer = [];
for (i=0; i<numbers.length; i++){
answer.push(numbers[i]*2)
}
return answer;
}
// 다른 사람 풀이
function solution(numbers) {
return numbers.reduce((a, b) => [...a, b * 2], []);
}
const solution = (numbers) => numbers.map((number) => number * 2)
정리
- 자바스크립트의 reduce 함수는 배열의 각 요소를 순회하며 callback 함수의 실행 값을 누적하여 하나의 결과값을 반환한다.
arr.reduce(callback[, initialValue])
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; const sum1 = numbers.reduce((accumulator, currentNumber) => accumulator + currentNumber); console.log('sum1 =', sum1);
- callback function
- 다음 4가지의 인수를 가진다.
- accumulator - accumulator는 callback함수의 반환값을 누적
- currentValue - 배열의 현재 요소
- index(Optional) - 배열의 현재 요소의 인덱스
- array(Optional) - 호출한 배열
- callback함수의 반환 값은 accumulator에 할당되고 순회중 계속 누적되어 최종적으로 하나의 값을 반환
- 다음 4가지의 인수를 가진다.
- initialValue(Optional)
- 최초 callback함수 실행 시 accumulator 인수에 제공되는 값, 초기값을 제공하지 않을경우 배열의 첫 번째 요소를 사용하고, 빈 배열에서 초기값이 없을 경우 에러가 발생
출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce https://tocomo.tistory.com/26
출처 : 프로그래머스, https://wikidocs.net/21113 11
댓글남기기