📝 문제
https://school.programmers.co.kr/learn/courses/30/lessons/181921
문제 설명
정수 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 합니다.
풀이 코드
using System.Linq;
public static int[] solution(int l, int r)
{
int[] answer = new int[] { };
answer = Enumerable.Range(l, r -l+ 1).
Where(x => x.ToString().All(y => y == '5' || y == '0')).ToArray();
if (answer.Length == 0)
return new int[1] { -1 };
return answer;
}
- 문제를 해석해 보면 파라미터로 들어온 l 이상, r 이하의 정수 중 0과 5로만 이루어진 정수를 추출해 return 하고 만약 그들로 이루어진 숫자가 없다면 -1을 담은 배열을 return 하는 것이다.
- 처음엔 for문과 if문을 사용하여 노가다 방식으로 구현해보고 Linq를 사용하여 구현하였다.
✍️ 중요 포인트
- Enumerable.Range는 파라미터로 2개의 정수를 받는다
- 첫 번째로 들어가는 값은 처음 시작하려는 정수, 두 번째로 들어가는 값은 길이를 뜻한다.
- 만약 5 이상 10 이하의 값을 생성하려면 파라미터 값으로 5부터 시작하여 6개의 길이 값을 넣어 주어야 하는데, 이를 (l, r - l +1)로 구현하면 다른 파라미터 값이 들어와도 조건에 맞게 구현된다.
- 첫 번째로 들어가는 값은 처음 시작하려는 정수, 두 번째로 들어가는 값은 길이를 뜻한다.
- All은 조건에 모든 값들이 만족하는가? 만족한다면 '맞다'라는 결과를 도출한다.
- ||문을 사용해 5와 0일 시에만 True값으로 설정하고 마지막으로 ToArray를 사용해 answer배열에 삽입해 주었다.
'알고리즘 > Programmers' 카테고리의 다른 글
lv.2 프로세스 C# (0) | 2024.04.08 |
---|---|
lv.2 올바른 괄호 C# (0) | 2024.03.31 |
lv.1 덧칠하기 C# (0) | 2024.03.17 |
lv.1 달리기 경주 C# (0) | 2024.03.16 |
lv.1 영어 끝말잇기 C# (0) | 2024.03.02 |