전체 글 211

[Java] Java 8 Method Reference (메소드 참조)

메소드 참조 (Method Reference) 메소드 참조는 람다 표현식의 특별한 타입중 하나이다. 이미 구현되어 있는 메소드를 참조함으로써, 람다식을 좀 더 심플하게 만들 때 사용된다. 4가지 타입의 메소드 참조가 있다. 1. 정적 메소드 참조 문법 ContainingClass::staticMethodName 정적 메소드가 포함된 클래스::정적 메소드명 예제 // 람다식으로 list의 원소 절대값 만들기 List list = Arrays.asList(1, -5, 2, -7, -3); list.stream().map(num -> Math.abs(num)) .forEach(num -> System.out.println(num)); // 정적 메소드 참조로 변경 list.stream().map(Math::a..

💻IT/Java 2021.12.12

[BOJ 14502] 연구소 (Java, Python)

문제 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하..

[BOJ 2529] 부등호 (Java)

문제 https://www.acmicpc.net/problem/2529 풀이 완전 탐색으로 풀었다. 재귀 함수를 호출한다. 1. 반복문을 이용하여 숫자를 선택한다. 2. 선택한 숫자에 대해 방문 체크를 한다. (visited 배열 사용) 3. 부등호 연산에 부합하는지 체크한다. 4. 선택한 숫자에 대해 방문을 추가한 후, 지금까지 저장해온 문자열에 선택한 숫자를 붙여서 재귀 함수를 호출한다. 5. 재귀 함수의 호출 횟수가 부등호의 개수+1 이 되었을 때, 현재까지 선택한 숫자의 값에 따라 Min, Max를 갱신한다. 소스코드 package bruteforce; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Inpu..

[Java] Java 8 Functional Interface

Functional Interface Functional Interface들은 java.util.function 패키지에 포함되어 있으며 람다 표현식이나 메소드 참조를 위한 target type을 제공한다. Functional Interface는 인터페이스이면서 내부에 추상 메소드를 한 개만 가진다. 해당 package 내에 많은 Functional interface가 존재하지만, 그 중에서도 중요한 4가지의 Functional interface에 대해서 알아보고자 한다. (Predicate, Function, Consumer, Supplier) Predicate Predicate는 인자를 받아서 true나 false를 리턴한다. @FunctionalInterface public interface Pre..

💻IT/Java 2021.12.10

[BOJ 15686] 치킨 배달 (Java, Python)

문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 5 2 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 2 0 0 1 1 2 2 0 1 2 0은 빈 칸, 1은 집, 2는 치킨집이다. (2, 1)에 있는 집과 (1, 2)에 있는 치킨집과의 거리는 |2-1| + |1-2| = 2, (5, 5)에 있는 치킨집과의 거리는 |2-5| + |1-5| = 7이다. 따라서, (2, 1)에 있는 집의 치킨 거리는 2이다. (5,..

[Java] Java 8 Optional

참고 https://www.oracle.com/technical-resources/articles/java/java8-optional.html https://www.baeldung.com/java-difference-map-and-flatmap NullPointerException !? 개발을 하면서 많이 경험했던 Exception은 아마 NullPointerException 이 아닐까 싶다. 위와 같은 모델 구조가 있다고 가정했을 때, 차에 포함된 네비게이션의 버전을 알고 싶다. String version = computer.getNavigation().getVersion(); Car에서 Navigation은 옵션 중 하나이다. 만약 Navigation이 없는 차라면 해당 코드 호출 시 NullPoin..

💻IT/Java 2021.12.09

[BOJ 10217] KCM Travel (Java)

문제 https://www.acmicpc.net/problem/10217 10217번: KCM Travel 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세 www.acmicpc.net 풀이 다익스트라 알고리즘을 사용하여 풀 수 있다. 보통 최소 거리(시간)을 저장할 배열로 1차 배열을 사용하지만 여기서는 비용을 고려해야 하므로 2차 배열로 생성 하여 사용한다. 소스코드 package dijkstra; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io..

[BOJ 14716] 현수막 (Java)

문제 https://www.acmicpc.net/problem/14716 14716번: 현수막 혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라. www.acmicpc.net 8 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0..

[프로그래머스] 코딩테스트 고득점 Kit (Java)

해시 완주하지 못한 선수 (Lv1) 더보기 import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; HashMap map = new HashMap(); for(String name : participant){ if(map.get(name) == null){ map.put(name, 1); } else { int cnt = map.get(name) + 1 ; map.put(name, cnt); } } for(String name : completion){ int cnt = map.get(name) + 1 ; map.put(name, cnt);..

[프로그래머스] 가장 큰 수 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 풀이 [6, 10, 2] "6210" 숫자를 String으로 변환 한 후, 인접 한 숫자끼리 합쳐서 사전 순서를 비교한다. 순서대로 합친 문자열이 사전의 뒷 순서가 되도록 숫자의 위치를 변경해준다. [6, 10, 2] 6, 10 = 610 10, 6 = 106 610이 사전의 뒷 순서이므로 변..