반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[프로그래머스/Java] 코딩테스트 Lv.0 짝수는 싫어요 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/나의 코딩테스트

[프로그래머스/Java] 코딩테스트 Lv.0 짝수는 싫어요

yeonee 여니 2023. 10. 1. 19:29
728x90
반응형
SMALL

안녕하세요.
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을 반환해줍니다.

728x90
반응형
LIST