자바

    [Effective Java] 스트림에서는 부작용 없는 함수를 사용하라

    스트림 패러다임 스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 부분이다. 이때 각 변환 단계는 가능한 한 이전 단계의 결과를 받아 처리하는 순수 함수이여야 한다. 순수 함수 오직 입력만이 결과에 영향을 주는 함수 스트림의 잘못된 사용 예시 Map freq = new HashMap(); try (Stream words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }) } 위 코드는 외부 상태(빈도표)를 수정하는 람다를 실행하면서 문제가 생긴다. (merge) forEach 연산은 스트림 계산 결과를 보여주는 일 이상을 하지 않는 것이 좋다. 잘 사용한 예시..

    [Effective Java] 표준 함수형 인터페이스를 사용하라

    java.util.function 패키지에는 다양한 용도의 표준 함수형 인터페이스가 담겨 있다. 기억해야 할 함수형 인터페이스 6개 Operator 인터페이스 - 반환값과 인수의 타입이 같은 함수 인수가 1개인 UnaryOperator 인수가 2개인 BinaryOperator T apply(T t) String::toLoswerCase T apply(T t1, T t2) BigInteger::add Predicate 인터페이스 - 인수 하나를 받아 boolean을 반환하는 함수 boolean test(T t) Collection::isEmpty Function 인터페이스 - 인수와 반환 타입이 다른 함수 R apply(T t) Arrays::asList Supplier 인터페이스 - 인수를 받지 않고 값..

    [백준] 14719 빗물 (JAVA)

    ✉️문제 https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 📝 접근 왼쪽에 있는 기둥의 최대값(LM)과 오른쪽에 있는 기둥의 최대값(RM)을 구한다. LM과 RM의 최소값을 구한다. 최소값 - 현재 인덱스의 높이 🗝 문제풀이 public class Q14719_B { static int[] heights; public static void main(String[] args) { Scanner sc = new Scanner(Sys..

    [백준] 17425 약수의 합2 (Java)

    ✉️문제 https://www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net 📝 접근 1. 테스트 케이스가 여러개이므로 미리 배열에 값들을 저장해 놓아야 한다. // f(A)를 구하는 과정 for(int i = 1; i < SIZE; i++) { for(int j = i; j < SIZE; j = j + i) { arr[j] += i; } } // g(A) 구하기 for(int i = 1; i < SIZE..

    [백준] 17427 약수의 합 2

    ✉️문제 https://www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net 📝 접근 10이하의 자연수 중에서 N의 배수를 몇 개인지 알아보자. (배수를 이용해서 약수를 구함) 1의 배수는 10 / 1 = 10개 2의 배수는 10 / 2 = 5개 (2, 4, 6, 8, 10) 3의 배수는 10 / 3 = 3개 (3, 6, 9) ... ... 10의 배수는 10 / 10 = 1개 g(n)의 값을 구하는 것이..