문제 설명
정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
입출력 예
l r result 5 555 [5,50,55,500,505,550,555] 10 20 [-1]
입출력 예 #1
- 5 이상 555 이하의 0과 5로만 이루어진 정수는 작은 수부터 5, 50, 55, 500, 505, 550, 555가 있습니다.
따라서 [5, 50, 55, 500, 505, 550, 555]를 return 합니다.입출력 예 #2
- 10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.
java.lang.ArrayIndexOutOfBoundsException 계속 나와서 고생한 문제...
매우 어려웠다
마지막에 5, 50, 55, 500.... 을 제대로 출력했는데 뒤에 빈 배열 만큼 0이 계속 들어가서 ㅋㅋㅋㅋㅋ 또 코드를 수정하게 되었다...
0이 아닌 숫자 갯수를 찾고 그 숫자만큼 배열 만들어서 넣기 -> IntStream 클래스의 of().anyMatch() 를 사용하려고 했는데 에러가 나고 잘 되지 않았다
간단한 방법을 두고 너무 어렵게 생각했었나보다.. 아래와 같이 간단하게 해결! ㅠ
answer = new int[list.size];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
이클립스에서 돌려보면서 작성한 코드
package association;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class main2 {
public static void main(String args[]) {
//입출력 예 2개
System.out.println(Arrays.toString(solution3(5, 555)));
// System.out.println(Arrays.toString(solution3(10, 20)));
}
public static int[] solution3(int l, int r) {
List<Integer> list = new ArrayList<>();
int[] tmp = new int[r-l+1];
int[] answer = null;
// System.out.println(answer.length); //551
for(int i = l; i<=r; i++){
//몇 개인지 모르기 때문에 index 생성
int index = 0;
String str = i + "";
for(int j = 0; j < str.length(); j++) {
if(str.charAt(j)=='0' || str.charAt(j)=='5'){
index++;
}
}
if(index == str.length()){
list.add(i);
}
}
if (list.isEmpty()) {
answer = new int[]{-1};
} else {
for (int i = 0; i < list.size(); i++) {
tmp[i] = list.get(i);
// System.out.println("list.size() : " + list.size()); //7
// System.out.println(list);
answer = new int[list.size()];
for (int j = 0; j < list.size(); j++) {
answer[j] = list.get(j);
}
}
}
return answer;
}
}
처음에는 int[] answer = new int[r-l+1];로 생성해주어서 리스트에 add, get하는 것으로 코드를 짰는데 뒤에 빈 배열만큼 0이 들어가는 바람에 tmp를 새로 만들고 0이 아닌 수만 answer로 옮겨주기로 했다
int[] tmp = new int[r-l+1];로 생성
answer = new int[list.size]; list size만큼 answer 배열 만들고
한번 더 for문을 돌려주었다
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
*내가 해결한 코드 - 프로그래머스
import java.util.ArrayList;
import java.util.List;
class Solution {
public int[] solution(int l, int r) {
List<Integer> list = new ArrayList<>();
int[] tmp = new int[r-l+1];
int[] answer = null;
for(int i = l; i<=r; i++){
//몇 개인지 모르기 때문에 index 생성
int index = 0;
String str = i + "";
for(int j = 0; j < str.length(); j++) {
if(str.charAt(j)=='0' || str.charAt(j)=='5'){
index++;
}
}
if(index == str.length()){
list.add(i);
}
}
if (list.isEmpty()) {
answer = new int[]{-1};
} else {
for (int i = 0; i < list.size(); i++) {
tmp[i] = list.get(i);
answer = new int[list.size()];
for (int j = 0; j < list.size(); j++) {
answer[j] = list.get(j);
}
}
}
return answer;
}
}
'코테 준비(with 프로그래머스)' 카테고리의 다른 글
프로그래머스 day7 - 배열 만들기4 (0) | 2023.12.18 |
---|---|
프로그래머스 day7 - 콜라츠 수열 만들기 (0) | 2023.12.14 |
프로그래머스 day7 - 카운트 업 (0) | 2023.11.27 |
***프로그래머스 day7, Java - 수열과 구간 쿼리4 (0) | 2023.11.23 |
프로그래머스 day6, Java - 수열과 구간 쿼리2 (0) | 2023.11.15 |