안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)
🪅 나의 문제 풀이
class Solution {
public int[] solution(int n) {
int[] answer = {};
for(int i = 1; i<=answer.length; i++){
if(n % 2 != 0){
answer[n] = i;
n++;
}
}
return answer;
}
}
[테스트 통과]
class Solution {
public int[] solution(int n) {
int[] answer = new int[(n+1)/2];
for(int i = 1; i <= n; i++) {
if(i % 2 == 1) {
answer[i/2] = i;
}
}
return answer;
}
}
🧸 코드설명
for문을 통해 배열의 길이만큼 반복문을 돌려, 매개변수인 int n이 2로 나누었을 때 0이 되지 않는 홀수만 배열 answer에 담아줍니다. 그리고 그 answer을 반환합니다. 하지만.... 테스트가 통과가 되지 않았습니다 ㅠㅠ
[해결 방안]
int[] answer 배열을 (n+1)/2 크기로 정의하는 이유는 n값에 따라 홀수의 요소를 갖는 배열을 만들기 위해서 였습니다.
주어진 조건에서 n은 1이상 100이하의 양의 정수이며, (n+1)/2를 예를 들어 수학적 특성을 찾아봅니다.
- n이 홀수인 경우: (n+1)/2는 n을 2로 나눈 결과값입니다. ex) n이 3일 경우, (3+1)/2 = 2로 나누어지며, 2개의 요소를 가진 배열을 만들게 됩니다. (2개의 요소 : 1, 3)
- n이 짝수인 경우 : (n+1)/2는 n을 2로 나눈 결과에 0.5를 더한 값입니다. ex) n이 4일 경우, (4+1)/2 = 2.5가 되며, 이때는 소수점 아래 자리를 버리고 2개의 요소를 가진 배열을 만들게 됩니다. (2개의 요소 : 1, 3)
즉, n이 홀수인 경우, n이 짝수인 경우 둘다 배열이 갖게 되는 홀수 요소가 같습니다.
☆ 항상 홀수 개의 요소를 가지는 배열을 생성하도록 하는 코드이므로 기억하여 다양한 상황에 사용할 수 있을 것 같습니다.
for문을 통해 if문에서 i가 홀수인지 아닌지 확인합니다. (소수점으로 떨어지는 값은 양수값만 반환하게 됩니다.) 그리고 배열 answer[i/2] = i 내가 찾고자하는 홀수의 값만 저장합니다. answer에 담긴 값을 반환해줍니다.
✨ 다른 풀이
풀이1)
여태 보았던 풀이들 중 좋아요가 정말 많았던 풀이에요.
먼저 java의 스트림을 사용하기 위해 import java.util.stream.IntStream을 import해줍니다.
정수 매개변수 int n을 받아 int[] solution 정수배열을 반환할거에요.
- IntStream.rangeClosed(0, n) : 0부터 n까지의 범위를 포함하는 정수 스트림을 생성해줍니다.
- .filter(value -> vlaue % 2 == 1) : 스트림에서 홀수 값을 필터링하여 vlaue % 2 == 1이되는 조건을 통과한 값만, 즉, 홀수만 스트림에 포함합니다.
- .toArray() : toArray메서드를 이용하여 스트림을 정수 배열로 변환합니다.
n의 값에 따라 0에서 n까지의 홀수로 이루어진 배열을 생성하여 그 결과값을 반환합니다.
ex) n값이 5라면 value % 2 == 1을 만족하는 숫자인 홀수 [1, 3, 5]가 됩니다.
+ toArray()메서드 참고자료
풀이2)
개인적으로 스트림 기법보다 저는 이게 좀 더 마음에 들었는데요, 먼저 ArrayList를 쓸 수 있도록 import해줍니다.
answer이라는 정수(integer)을 제네릭으로 갖는 ArrayList를 생성해줍니다. for반복문을 통해 1부터 n까지의 정수의 수만큼 반복문을 돌립니다. if조건문의 i%2 != 0 조건(홀수)을 만족하는 i만 answer에 담아줍니다.(추가)
즉, answer은 n값에 따라 1부터 n까지의 홀수를 담을 수 있도록 생성된 ArrayList인 answer을 반환해줍니다.
'。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★ > 나의 코딩테스트' 카테고리의 다른 글
[프로그래머스/Java] 코딩테스트 Lv.0 자릿수 더하기 (1) | 2023.10.04 |
---|---|
[프로그래머스/Java] 코딩테스트 Lv.0 최댓값 만들기(1) (0) | 2023.10.03 |
[프로그래머스/Java] 코딩테스트 Lv.0 최빈값 구하기 (0) | 2023.09.30 |
[프로그래머스/Java] 코딩테스트 Lv.0 배열의 유사도 (0) | 2023.09.26 |
[프로그래머스/Java] 코딩테스트 Lv.0 점의 위치 구하기 (0) | 2023.09.24 |