카테고리 없음

알고리즘 문제

rxo2 2025. 4. 22. 21:00

정수 l부터 r까지 중 모든 자리 숫자가 0 또는 5로만 이루어진 정수들을 찾기

  • 오름차순 배열로 리턴
  • 없다면 [-1] 리턴
using System; 

public class Solution {
    // l 이상 r 이하의 정수 중에서 숫자가 0과 5로만 이루어진 수들을 배열로 반환하는 함수
    public int[] solution(int l, int r) {
        // 임시 배열: 결과 최대 개수는 (r - l + 1)이므로 그만큼 공간을 확보
        int[] temp = new int[r - l + 1];
        int count = 0;  // 조건을 만족하는 수를 세기 위한 카운터

        // l부터 r까지 반복하면서 각 숫자 검사
        for (int i = l; i <= r; i++) {
            if (IsValid(i)) {  // 만약 숫자 i가 0과 5로만 이루어져 있다면
                temp[count++] = i;  // 임시 배열에 저장하고 count 증가
            }
        }

        // 조건을 만족한 숫자가 하나도 없으면 -1을 담은 배열 반환
        if (count == 0) {
            return new int[] { -1 };
        }

        // 조건을 만족한 수만큼 정확한 크기의 배열 생성
        int[] answer = new int[count];
        for (int i = 0; i < count; i++) {
            answer[i] = temp[i];  // temp 배열에서 실제 값들만 복사
        }

        return answer;  // 최종 결과 반환
    }

    // 해당 숫자가 0과 5로만 이루어졌는지 검사하는 함수
    private bool IsValid(int num) {
        // 숫자의 각 자리 수를 검사
        while (num > 0) {
            int digit = num % 10;  // 맨 끝 자리 수 추출
            if (digit != 0 && digit != 5) return false;  // 0이나 5가 아니면 false
            num /= 10;  // 다음 자리 수로 이동
        }
        return true;  // 모든 자리 수가 0 또는 5일 경우 true
    }
}