본문 바로가기
코테 준비(with 프로그래머스)

프로그래머스 day7 - 배열 만들기2

by jeong11 2023. 11. 28.
반응형
문제 설명

정수 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;
    }
	
}
반응형