이거 문제가 뭔 말인지 이해가 안가서 이해하는데 한참 걸렸는데, 문제 내용은 입력을 2번 받게 되는데 먼저 받는 입력 중 앞에 받는 값이 최대값이고, 다음 값이 최소값이다 이후 두 번째 줄에 받는 값으로 배수를 구하면서 최소값 최대값 범위 안에 있는 수를 모두 합쳐 출력하되, 중복된 값은 제외해줘야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int max = input[0];
int[] value = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
HashSet<Integer> set = new HashSet<>();
for (int i : value) {
for (int j = 1; i * j <= max; j++) {
set.add(i * j);
}
}
System.out.println(set.stream().reduce(0, Integer::sum));
}
}
문제 설명만 쉽게 해도 문제 난이도가 쉬워지는데, 설명만 보면 이건 대체 뭔 이런 생각부터 들더라, 어쨌든 문제를 풀어보자면 처음 입력받는 최대값, 최소값 중 최소값은, 다음에 받을 입력값에서 첫 번째 수가 최소값부터 시작하기 때문에 딱히 생각할 필요가 없고
이후에는 for 문을 돌리면서 입력받은 두 수를 1씩 올려가며 set에 넣어주면, 중복 문제를 피하면서 최대값까지 배수를 올려가면서 곱했을 때 값을 구해줄 수 있고 반복이 끝나고 나면 set에서 모든 항목을 더해서 출력해주면 끝이다.
Leave a Reply