l과 r 사이의 숫자 중에서 0과 5만 들어간 숫자를 구해야 하기 떄문에 l과 r 범위의 for문을 선언합니다.
값을 비교하고 저장해도 될지를 정할 수 있도록 논리형 flag를 true로 선언해줍니다.
이후 l과 r 사이의 숫자를 문자 배열로 변환하여 숫자 하나하나 비교하여 0과 5가 아닌 숫자가 들어 있는지 확인할 수 있게 문자열 s를 선언하고 for문의 반복되는 횟수를 나타내는 i를 문자열로 변환하여 s에 저장해줍니다.
문자열로 변환된 s를 for문으로 문자로 쪼개 문자 하나씩 비교할 수 있도록 for문을 선언하고
if문으로 하나씩 쪼개진 문자를 0과 5가 아닌 숫자가 있다면 앞서 선언한 flag를 false로 저장해줍니다.
if문에 해당하지 않으면 0과 5로 이루어진 숫자이기 때문에 if문을 flag 조건으로 선언하여 answer에 i 값을 추가하도록 해줍니다.
마지막으로 전체 로직을 벗어난 후 if문으로 answer가 빈 배열이면 -1을 추가하도록 해주면 됩니다.
package com.namji.codingtest;
import java.util.ArrayList;
import java.util.List;
public class 배열_만들기_2 {
public static void main(String[] args) {
/*
정수 l과 r이 매개변수로 주어집니다.
l 이상 r이하의 정수 중에서
숫자 "0"과 "5"로만 이루어진 모든 정수를
오름차순으로 저장한 배열을 출력하는 문제입니다.
만약 그러한 정수가 없다면, -1이 담긴 배열을 출력합니다.
제한사항
1 ≤ l ≤ r ≤ 1,000,000
입출력 예
l r result
5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]
*/
int l = 5;
int r = 555;
List<Integer> answer = new ArrayList<>();
for (int i = l; i <= r; i++) {
boolean flag = true;
String s = i + "";
for (char c : s.toCharArray()) {
if (c != '0' && c != '5') {
flag = false;
}
}
if (flag) {
answer.add(i);
}
}
if (answer.isEmpty()) {
answer.add(-1);
}
System.out.println(answer);
}
}
프로그래머스 코드
import java.util.*;
class Solution {
public List solution(int l, int r) {
List<Integer> answer = new ArrayList<>();
for (int i = l; i <= r; i++) {
String s = i + "";
boolean bool = true;
for (char c : s.toCharArray()) {
if (c != '0' && c != '5') {
bool = false;
}
}
if (bool) {
answer.add(i);
}
}
if (answer.isEmpty()) {
answer.add(-1);
}
return answer;
}
}