[Tistory] [C#][프로그래머스 > 코딩테스트 기초] 배열 만들기2

원글 페이지 : 바로가기

프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 배열 만들기2 https://school.programmers.co.kr/learn/courses/30/lessons/181921 📒 문제 정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 “0”과 “5”로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요. 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다. 제한사항 1 ≤ l ≤ r ≤ 1,000,000 입출력 예 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;
using System.Collections.Generic;
using System.Linq;

public class Solution {
public int[] solution(int l, int r) {
List answer = new List();

for(int i = l; i <= r; i++) { int target = i; while(target > 0)
{
if(target%10 == 5 || target%10 == 0) target /= 10;
else goto End;

}
answer.Add(i);

End:
{}
}

if(answer.Count == 0) answer.Add(-1);

return answer.ToArray();
}
} 다른 풀이 using System;
using System.Collections.Generic;
using System.Linq;

public class Solution {
public 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}; return answer; } } ※ 참고 사이트 List to array : https://codechacha.com/ko/csharp-convert-list-to-array/ goto : https://thebook.io/006890/0273/ Enumerable : https://eteo.tistory.com/532 all : https://yangbengdictionary.tistory.com/3 📝 풀이 우선 내가 한 풀이는 while문을 돌려 10으로 나눈 나머지가 0이나 5인 경우 10으로 나눠 자리수를 줄여 가면서 문제없이 while문을 빠져나오면 answer에 담아주고 나머지가 0이나 5가 아닌 경우 goto를 이용해 End위치로 보내 answer에 담지 못하게 했다. 하지만 goto의 경우 가독성과 유지보수성의 저하 등 다양한 이유로 사용 하기를 피해야 한다고한다. https://velog.io/@wjj329/%EB%82%B4%EC%9D%BC%EB%B0%B0%EC%9B%80%EC%BA%A0%ED%94%84-Unity-240116-TIL-C-%EC%96%B8%EC%96%B4%EC%97%90%EC%84%9C-Go-to%EB%AC%B8%EC%9D%84-%EA%B6%8C%EC%9E%A5%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EC%9D%B4%EC%9C%A0 그래서 다른 풀이를 찾은 결과 Enumerable을 통해 해결한 풀이를 찾을 수 있었다. Range(1, r - l +1) 을 통해 범위 내의 숫자를 생성하고 where메서드 안에서 각 숫자를 ToString()을 통해 문자열로 만들어준뒤 All()로 문자열의 모든 문자가 5나 0인지 판단하는 조건으로 시퀀스를 반환한 다음 ToArray()로 배열로 만들어 주었다. 배열의 길이가 0이면 -1을 담고 아니면 그대로 return하였다. 관련 내용 [C# 문법] Enumerable 클래스 Enumerable 클래스 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다. Enumerable 클래스Enumerable 클래스는 LINQ의 일부로 IEnumerable 인터페이스를 구현하는 컬렉션 클래스에 대한 LINQ 기능 twd0622.tistory.com

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다