알고리즘 day
내 코드
public int solution(int[][] board, int[] moves) {
int answer = 0;
ArrayList<Integer> box = new ArrayList<>(moves.length);
// box 생성
for (int i = 0; i < moves.length; i++) {
int column = moves[i] - 1;
for (int j = 0; j < board.length; j++) {
if (board[j][column] != 0) {
box.add(board[j][column]);
board[j][column] = 0;
break;
}
}
}
// 바구니 안에서 인형 터지는 동작
for (int i = 0; i < box.size() - 1; i++) {
if (box.get(i) == box.get(i + 1)) {
box.remove(i + 1);
box.remove(i);
answer += 2;
i = -1;
}
}
return answer;
}
아래 두 블로그 보고 학습
Java - 자바 클로져(Closure) & 커링(currying)
자바에서 클로저의 동작
내부함수가 사용하는 외부함수의 지역변수를 클로저가 생성되는 시점에 final로 간주된다. 값이 변경될 수 없다. 자바 1.8부터는 final을 명시적으로 붙이지 않아도 컴파일에 의해 final 로 간주된다.
람다와 클로저
결론 : 람다는 클로저를 포함하는 더 큰 개념, 람다가 자신의 범위 밖에 있는 변수를 사용하면 그것은 람다인 동시에 클로저이다.
아래 블로그 참고해서 학습
순수함수(pure function)
public class ObjectWithPureFunction {
public int sum(int a, int b) {
return a + b;
}
}
sum()은 오직 매개변수에 의해서만 반환값이 나온다.
side effects가 없다
→ sum()은 함수 바깥의 변수들에 아무런 영향을 주지 않는다.
고차함수(higher-order function)
함수를 인자로 전달받거나 함수를 결과로 반환하는 함수
자바에서는 하나 이상의 람다식을 파라미터로 받는 함수 그리고 다른 람다식을 반환하는 함수가 될 수 있다.
예시
public class HigherOrderFunctionClass {
public <T> IFactory<T> createFactory (IProducer<T> producer,
IConfigurator<T> configurator) {
return () -> {
T instance = producer.produce();
configurator.configure(instance);
return instance;
}
}
}
public interface IFactory<T> {
T create();
}
public interface IProducer<T> {
T produce();
}
public interface IConfigurator<T> {
void configure(T t);
}
객체지향 패러다임과 함수형 패러다임
아래 두 블로그 참고해서 학습
함수형 프로그래밍 기초 (1) 왜 함수형 프로그래밍인가
[JAVA 8] - 함수형 프로그래밍(Functional Programming)