728x90
- 짝수는 싫어요
문제 설명
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 100
입출력 예nresult
n | result |
10 | [1, 3, 5, 7, 9] |
15 | [1, 3, 5, 7, 9, 11, 13, 15] |
입출력 예 설명
입출력 #1
- 10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.
입출력 #1
- 15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.
[ 풀이 1 ]
1
2
3
4
5
6
7
8
9
10
11
|
public class Solution {
public int[] solution(int n) {
int length = n/2;
if(n%2==1) length++;
int[] answer = new int[length];
for (int i = 0; i < answer.length; i++) {
answer[i] = (i + 1) * 2 - 1;
}
return answer;
}
}
|
cs |
일단 제일 먼저 구해야 하는 것이 홀수들의 개수이다. 그런데 n 값에 따라 홀수의 개수가 달라진다. 10 이면 10/2 = 5 ---1, 3, 5, 7, 9 이렇게 5개가 되지만 15이면 15/2 = 7 + 1 --- 1, 3, 5, 7, 9, 11, 13, 15 이렇게 8개가 된다. 그렇다면 answer배열의 크기는 어떻게 구할까? 주어지는 n값이 홀수인지 짝수인지를 구해서 짝수이면 나누기 2를 홀수이면 나누기 2 더하기 1을 해야 한다. 3항 연산자를 이용한 식으로 표현하면 int length = n%2==0 ? n/2 : n/2+1; 뭔가 냄새가 난다. n/2가 두번이나 들어갔다. 좀더 좋은 코드는 없을까? int length = n/2; if(n%2==1) length++; // 홀수 일때만 +1을 더해준다. 그래도 냄세가 난다. 배수가 아닐때만 +1을 해준다. 그렇다면 넘어온 수에서 1을 빼준 수를 만들고 나누기를 한다음 무조건 + 1을 해줘도 되지 않을까? (10-1) / 2 + 1 = 9 / 2 + 1 = 4 + 1 = 5 (15-1) / 2 + 1 = 14 / 2 + 1 = 7 + 1 = 8 와~~~~ 이렇게 하면 되곘구나 하하하하하..... 아래의 풀이처럼 조건문을 사용하지 않고 배열의 크기를 구할 수 있다. |
[ 풀이 2 ]
1
2
3
4
5
6
7
8
9
|
class Solution {
public int[] solution(int n) {
int[] answer = new int[(n-1)/2+1];
for(int i=0;i<answer.length;i++){
answer[i] = (i+1)*2-1;
}
return answer;
}
}
|
cs |
두 번째로 구해야 하는 것은 만든 배열에 홀수를 채워 넣는것이다. i 변수값 넣은 홀수 값 0 1 1 3 2 5 . . . 뭔가 규칙이 있는것 같은데 규칙을 찾아보자 (0 + 1) * 2 - 1 = 1 - 2 - 1 = 2 - 1 = 1 (1 + 1) * 2 - 1 = 2 * 2 - 1 = 4 - 1 = 3 (2 + 1) * 2 - 1 = 3 * 2 - 1 = 6 - 1 = 5 계산식이 나왔다. (i + 1) * 2 - 1 이면 된다. 0 1 2 3 4 5 가 1 3 5 7 9로 바뀌게 된다. 그래서 배열크기만 큼 반복하면서 배열에 i(index)를 이용하며 홀수를 만들어 넣어 주었다. |
728x90
'프로그래머스 코딩(자바) > Level 0' 카테고리의 다른 글
Programmers Level 0 - 특정 문자 제거하기 (0) | 2023.02.27 |
---|---|
Programmers Level 0 - 피자 나눠 먹기(3) (0) | 2023.02.27 |
Programmers Level 0 - 문자열 뒤집기 (0) | 2023.02.27 |
Programmers Level 0 - 문자 반복 출력하기 (0) | 2023.02.27 |
Programmers Level 0 - 배열 자르기 (0) | 2023.02.27 |