본문 바로가기

전체 글

(461)
[JAVA] 백준 1309번: 동물원 (초급 1-25) 문제 어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다. 이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다. 동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다. 입력 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. 출력 첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라. import java.util.Arrays; import java.util.Scanner;..
[JAVA] 백준 1149번: RGB거리 ( 초급 1-24 ) 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 ..
[JAVA] 백준 15988번: 1,2,3 더하기 3 ( 초급 1-23 ) 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 1,000,000보다 작거나 같다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. import java.util.Scanner; public class baekjoon15988 { public s..
옵셔널 요구사항 1 - Optional을 활용해 조건에 따른 반환 nextstep.optional.User의 ageIsInRange1() 메소드는 30살 이상, 45살 이하에 해당하는 User가 존재하는 경우 true를 반환하는 메소드이다. 같은 기능을 Optional을 활용해 ageIsInRange2() 메소드에 구현한다. 메소드 인자로 받은 User를 Optional로 생성하면 stream의 map, filter와 같은 메소드를 사용하는 것이 가능하다. nextstep.optional.UserTest의 테스트가 모두 pass해야 한다. 힌트 Guide To Java 8 Optional 문서를 참고해 Optional 사용 방법을 익힌다. Optional.ofNullable(user)을 활용해 User을 Opt..
스트림 실습 map, reduce, filter 실습 1 List에 담긴 모든 숫자 중 3보다 큰 숫자를 2배 한 후 모든 값의 합을 구한다. 지금까지 학습한 map, reduce, filter를 활용해 구현해야 한다. nextstep.fp.StreamStudyTest 클래스의 sumOverThreeAndDouble() 테스트를 pass해야 한다. 구현 결과 public static long sumOverThreeAndDouble(List numbers) { return numbers.stream() .filter(integer -> integer > 3) .map(integer -> integer * 2) .reduce(0, (x,y) -> x + y); } map, reduce, filter 실습 2 nextst..
스트림(stream) map, filter, reduce Collection에 담긴 데이터를 처리하려면 Collection을 순회하면서 각 Element를 처리하는 것이 일반적이다. 앞으로는 순회하는 것을 잊고, Element 처리에만 집중하자. filter 요구사항은 파일 문자 중 길이가 12보다 큰 문자의 수를 구한다. // nextstep.fp.StreamStudy countWords method String contents = new String(Files.readAllBytes( Paths.get("../ war-and-peace.txt")), StandardCharsets.UTF_8); List words = Arrays.asList(contents.split("[\\P{L}]+")); long count = 0;..
람다 실습 2 - 람다를 활용해 중복 제거 람다 실습 2 - 람다를 활용해 중복 제거 3개의 비슷한 기능을 가진 메서드가 존재한다. sumAll, sumAllEven, sumAllOverThree method 소스 코드를 확인하고 중복 제거한다. 람다를 사용하여 중복된 부분을 제거하여 보자. public static int sumAll(List numbers) { int total = 0; for (int number : numbers) { total += number; } return total; } public static int sumAllEven(List numbers) { int total = 0; for (int number : numbers) { if (number % 2 == 0) { total += number; } } retur..
람다 실습 1 - 익명 클래스를 람다로 전환 람다 실습 1 - 익명 클래스를 람다로 전환 Car 클래스는 아래와 같다. package nextstep.fp; import java.util.Objects; public class Car { private final String name; private final int position; public Car(String name, int position) { this.name = name; this.position = position; } public Car move(MoveStrategy moveStrategy) { if (moveStrategy.isMovable()) { return new Car(name, position + 1); } return this; } @Override public bo..