TIL

2023-10-18 TIL (프로그래머스)

우성팔 2023. 10. 19.

오늘 개인과제가 발제가 발표되어 과제 마무리하느라고 날짜가 넘어가고 작성하게 되었다

 

'배열 만들기2' 문제였는데

파이썬

def solution(l, r):
    answer = []
    for a in range(l,r+1):
        if all(num in ['0','5'] for num in str(a)):
            answer.append(a)
        
    if len(answer) == 0:
        answer.append(-1)
    
    return answer

파이썬으로는 all()함수를 사용해서 0과 5로만 이루어진 숫자를 구별해 낼 수 있어서 간편했는데

자바는 내가 일일이 직접 짜야했다.

 

JAVA

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> arrayList = new ArrayList<>();


        for (int i = l; i <= r; i++) {
            String numStr = String.valueOf(i); // i에 해당하는 숫자를 String타입으로 numStr에 대입
            boolean flag = true;

            for (int j = 0; j < numStr.length(); j++) {
                char numchar = numStr.charAt(j); // numStr에 인덱스(j)에 해당하는 문자 numchar에 대입
                if (numchar != '0' && numchar != '5') { //그 때 numchar가 0이나 5가 아니면 flag 값을 false로 바꿔줌
                    flag = false;
                    break;
                }
            }

            if (flag) { // 0과 5로 이루어지지 않은 수는 flag값이 false이므로 0과 5로만 이루어진 값 리스트에 넣어줌
                arrayList.add(i);
            }
        }

        if (arrayList.isEmpty()) { // 문제조건인 0과 5로 이루어진 숫자가 없으면 [-1] 을 반환
            return new int[]{-1};
        }

        int[] answer = new int[arrayList.size()];

        for (int i = 0; i < arrayList.size(); i++) {
            answer[i] = arrayList.get(i);
        }

        return answer;
    }
}

상당히 코드가 길어졌다 :(

찾아보니 다른 간단하고 간편한 방법이 있어서 얼른 자바에 익숙해져야겠다고 생각했다!

 

 

class Solution {
    public int[] solution(int l, int r) {
        List<Integer> arrayList = new ArrayList<>();


        for (int i = l; i <= r; i++) {
            String numStr = String.valueOf(i);
            if(numStr.matches("[05]+")){// 정규 표현식으로, 문자열이 '0' 또는 '5'로 이루어진 하나 이상의 문자로 구성되어야 함
                arrayList.add(i);
            }
        }

        if (arrayList.isEmpty()) {
            return new int[]{-1};
        }

        return arrayList.stream().mapToInt(Integer::intValue).toArray();
        // arrayList를 스트림으로 변환하고 스트림의 각 요소를 Integer 객체에서 int값으로 변환(언박싱) 그 다음 
        // 스트림의 결과를 int 배열로 변환
    }
}

다른 분이 푼 것인데 하나하나 살펴보고 배워야 겠 다!

댓글