알고리즘 문제를 이리저리 돌려가며 풀다가 Map을 스트림으로 다룰 때의 자료형이 필요했다. 일단 인텔리제이에서 알려주는 대로 사용해서 문제를 풀고, 따라가며 공부하기. Map.Entry 소개부터 하자면 Map.Entry는 자바 컬렉션 프레임워크의 Map 인터페이스의 내부 인터페이스이다. Map과 마찬가지로 키-값의 데이터를 저장하며, Map에서 .entrySet() 연산자를 호출하면 생성할 수 있다. 정확하게 말하자면 .entrySet()의 경우 이름 그대로 아래와 같은 Set을 생성하며, Map integerMap = new HashMap(); Set set = integerMap.entrySet(); 위 Set에 모든 엔트리 객체가 담겨있기 때문에 개별 Map.Entry를 제어하려면 그대로 스트림을..
문제 X 대학 M 교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데, 그중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오. 입력 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다. 출력 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그다음 출석번호를 출력한다. 풀이 스트림으로 어떻게 풀지.. 하다가 며칠 전에 자바 8과 11을 비교한 포스팅을 적은 걸 기억해냈다. 거기서 얻은 Predicate키워드를 이용해 일단 1부터..
문제 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다. 출력 1부터 n까지 합을 출력한다. 풀이 반복문을 스트림으로 풀이하는 기본 중의 기본 문제이다. 간단하게 풀 수 있다. import java.util.Scanner; import java.util.stream.IntStream; public class Prob8393Stream { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int result = IntStream.rangeClosed(1, n) .sum(); System.out.pri..
문제 자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60 이상 100 이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다. 입력 입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다. 출력 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. 풀이 IntStream을 두 번 사용해서 ..
문제 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오. 입력 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. 출력 주어진 수들 중 소수의 개수를 출력한다. 풀이 입력 값으로 리스트를 생성한 다음 스트림을 이중으로 사용해서 소수를 판별했다. 소수 판별법에 따라 연산 속도를 위해 1부터 √a 까지만 순회하도록 했다. import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.stream.IntStream; public class Prob1978Stream { public static void m..
문제 무한히 큰 배열에 다음과 같이 분수들이 적혀있다. 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 와 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 출력 첫째 줄에 분수를 출력한다. 풀이 수열을 조금 더 늘어놓고 규칙 및 풀이 방법을 찾아보자. $$\frac{1}{1}, \frac{1}{2}, \frac{2}{1},..
문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 출력 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 풀이 지나는 방의 개수를 구하기 위해 해당 껍질의 최댓값을 나열하면 1, 7, 19, 37.. 순으로 증가한다. 즉 첫 항이 1이고 계차..
소수(Prime Number)는 1과 자기 자신으로밖에 나누어 떨어지지 않는 1 이외의 정수를 말한다. 지난 글에 올렸던 스트림으로 도는 이중 반복문을 소수 찾기에 응용해 보았다. 임의의 정수 m과 n사이의 소수를 전부 출력하는 코드이며, 단순이 2부터 자기 자신의 제곱근까지 전부 나누어보는 방법을 취한다. 조금 더 정확하게는 두 가지의 필터링을 사용하는데, 1보다 큰 수일 것 2부터 자기 자신의 제곱근(의 반올림)까지 나누어 떨어지지 않을 것 이다. 코드를 보자. import java.util.Scanner; import java.util.stream.IntStream; public class SearchPrimeNumbers { public static void main(String[] args) {..
이중 반복문으로 출력할 수 있는 가장 간단한 일 중 하나가 바로 구구단이다. 스트림을 이래저래 가지고 놀다 보니까 이중 반복문도 돌아보고 싶어 졌는데, 연습하는 김에 구구단을 출력해 본다. 이중 for문으로 구구단 출력 특별한 설명은 필요 없을 것 같아서 바로 코드로 간다. import java.util.ArrayList; import java.util.List; public class MultiplicationTable { public static void main(String[] args) { for(int i = 2; i < 10; i++) { List list = new ArrayList(); for (int j = 1; j < 10; j++) { list.add(i * j); } System.o..
문제 N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. 출력 입력으로 주어진 숫자 N개의 합을 출력한다. 풀이 큰 수를 입력받기 위해서 문자열로 받아 스트림으로 자른 뒤 변환했다. 추가로 이 풀이에는 입력에서 주어지는 숫자의 개수가 필요 없다(입력 받기만 하고 사용하지 않는다). import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Prob11720Stream { public static void mai..
- Total
- Today
- Yesterday
- 백준
- 유럽여행
- 세계일주
- 중남미
- 여행
- Python
- RX100M5
- 야경
- 세계여행
- 칼이사
- 남미
- 지지
- 세모
- BOJ
- a6000
- 알고리즘
- 파이썬
- 리스트
- java
- spring
- 면접 준비
- 동적계획법
- Algorithm
- 맛집
- 자바
- Backjoon
- 기술면접
- 유럽
- 스프링
- 스트림
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |