Problem Solving/Baekjoon
[백준] 9575 행운의 수 - Data Structure / Java
graycode
2023. 4. 26. 21:36
• 문제 링크
9575번: 행운의 수
각각의 테스트 케이스마다 입력으로 주어진 수열을 이용해 만들 수 있는 서로 다른 행운의 수의 개수를 한 줄에 하나씩 출력한다.
www.acmicpc.net
• 풀이 과정
입력을 일반적인 반복문으로 처리 시 성능 상 이점이 있지만,
이 풀이에서는 Stream API 를 활용하여 중복을 제거한 세 수열을 입력받았다.
수열의 크기가 50을 넘지 않으므로 가능한 모든 합의 경우를 구해,
해당 수의 자릿수 중 5 또는 8 이 포함하는 지 확인하여 Set 에 저장해 행운의 수를 구한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
while (t-- > 0) {
br.readLine();
int[] a = macro(br.readLine());
br.readLine();
int[] b = macro(br.readLine());
br.readLine();
int[] c = macro(br.readLine());
Set<Integer> set = new HashSet<>();
for (int i : a) {
for (int j : b) {
for (int k : c) {
int sum = i + j + k;
if (check(sum))
set.add(sum);
}
}
}
sb.append(set.size()).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
private static boolean check(int n) {
while (n != 0) {
if (n % 10 != 5 && n % 10 != 8)
return false;
n /= 10;
}
return true;
}
private static int[] macro(String input) {
return Arrays.stream(input.split(" ")).mapToInt(Integer::parseInt).distinct().toArray();
}
}