
내가 생각했을때 문제에서 원하는부분
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
내가 이 문제를 보고 생각해본 부분
Main24 클래스는 프로그램 실행 진입점이며, main 메서드에서 두 가지 테스트 케이스를 실행한다.
arrayToString 메서드는 결과 배열을 사람이 보기 쉬운 [5, 50, 55] 형식 문자열로 변환해서 출력한다.
Solution4 클래스 안에 문제를 푸는 solution 메서드와 그 보조 메서드가 구현되어 있다.
solution 메서드는 l부터 r까지 모든 정수를 순회한다.
각 숫자를 isZeroOrFive 조건 검사 메서드에 전달해 0과 5로만 이루어졌는지 판단한다.
조건을 만족하면 result 리스트에 추가한다.
검사 후, 결과 리스트가 비어 있으면 int[]{-1}을 반환한다.
그렇지 않으면 리스트를 기본 배열로 변환해 반환한다.
isZeroOrFive는 정수를 문자열로 바꾼 후, 각 자리 문자가 '0' 또는 '5'가 아닌지 검사하여 조건 부합 여부를 판단한다.
모든 자릿수가 '0' 또는 '5'면 true, 하나라도 다르면 false를 반환한다.
코드로 구현
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> result = new ArrayList<>();
for (int num = l; num <= r; num++) {
if (isZeroOrFive(num)) {
result.add(num);
}
}
if (result.isEmpty()) {
return new int[]{-1};
}
int[] answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
private boolean isZeroOrFive(int num) {
String str = String.valueOf(num);
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != '0' && c != '5') {
return false;
}
}
return true;
}
}
프로그래머스 코드
package programmers;
import java.util.ArrayList;
// 프로그래머스 배열 만들기 2
public class Main24 {
public static void main(String[] args) {
Solution4 solution4 = new Solution4();
int l1 = 5, r1 = 555;
int[] result1 = solution4.solution(l1, r1);
System.out.println(arrayToString(result1));
int l2 = 10, r2 = 20;
int[] result2 = solution4.solution(l2, r2);
System.out.println(arrayToString(result2));
}
private static String arrayToString(int[] arr) {
if (arr == null || arr.length == 0) {
return "[]";
}
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
if (i != arr.length - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
class Solution4 {
public int[] solution(int l, int r) {
ArrayList<Integer> result = new ArrayList<>();
for (int num = l; num <= r; num++) {
if (isZeroOrFive(num)) {
result.add(num);
}
}
if (result.isEmpty()) {
return new int[]{-1};
}
int[] answer = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
private boolean isZeroOrFive(int num) {
String str = String.valueOf(num);
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c != '0' && c != '5') {
return false;
}
}
return true;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.