오늘 개인과제가 발제가 발표되어 과제 마무리하느라고 날짜가 넘어가고 작성하게 되었다
'배열 만들기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 배열로 변환
}
}
다른 분이 푼 것인데 하나하나 살펴보고 배워야 겠 다!
'TIL' 카테고리의 다른 글
2023-10-24 TIL(프로그래머스) (0) | 2023.10.24 |
---|---|
2023-10-23 TIL(컬랙션) (0) | 2023.10.23 |
2023-10-20 TIL (추상클래스와 인터페이스의 차이점) (2) | 2023.10.20 |
2023-10-19 TIL (git, 프로그래머스) (0) | 2023.10.19 |
2023-10-17 TIL(프로그래머스) (5) | 2023.10.17 |
댓글