코딩테스트연습/[프로그래머스] Java

[프로그래머스] Java 코딩테스트 연습 - 배열의 길이에 따라 다른 연산하기

_꼬마돌 2023. 6. 25. 00:26
반응형

[프로그래머스] Java 코딩테스트 연습 - 배열의 길이에 따라 다른 연산하기

문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/181854

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

정수 배열 arr과 정수 n이 매개변수로 주어집니다. arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을, arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return하는 solution함수를 작성해 주세요.

 

풀이

시간초과,,?

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = new int[arr.length];
        
        for (int i = 0; i < arr.length; i++) {
            if (arr.length % 2 != 0) {
                while (i % 2 == 0) {
                    answer[i] = arr[i] +n;
                }
            } else {
                while (i % 2 != 0) {
                    answer[i] = arr[i] +n;
                }
            }
        }
        
        return answer;
    }
}

"실행 시간이 10.0초를 초과하여 실행이 중단되었습니다. 실행 시간이 더 짧은 다른 방법을 찾아보세요."

요런건 첨본다. 근데 어차피 틀린 답일 것 같아서 괜찮다. 다시 풀어보면 되지 ㅋ.ㅋ

2차시도,,for문을 따로 만들어봤다.

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = new int[arr.length];
        
        if (arr.length % 2 != 0) {
            for (int i = 0; i < arr.length; i++) {
                if (i % 2 == 0) {
                    answer[i] = arr[i] + n;
                }    // else {answer[i] = arr[i];} 여기에 이걸 안 넣어서 0이 생겨버린 것이다 
            }
        } else {
            for (int i = 0; i < arr.length; i++) {
                if (i % 2 != 0) {
                    answer[i] = arr[i] +n;
                }    // else {answer[i] = arr[i];} 여기도 마찬가지.
            }
        }
        
        return answer;
    }
}

테스트 1
입력값 〉	[49, 12, 100, 276, 33], 27
기댓값 〉	[76, 12, 127, 276, 60]
실행 결과 〉	실행한 결괏값 [76,0,127,0,60]이 기댓값 [76,12,127,276,60]과 다릅니다.
테스트 2
입력값 〉	[444, 555, 666, 777], 100
기댓값 〉	[444, 655, 666, 877]
실행 결과 〉	실행한 결괏값 [0,655,0,877]이 기댓값 [444,655,666,877]과 다릅니다.


간단하게 해결할 수 있는 문젠데 저 0들은 왜 나타났는지 한참 고민했다. 어휴 내 시간,,

문제를 읽으면서 문제에 맞게 순서대로 코드를 작성했다. 
% 나머지 연산자로 arr과 인덱스의 홀짝 여부를 구분하고, 그 다음엔 문제에서 요구하는 대로 짝수번째 인덱스 자리 또는 홀수번째 인덱스 자리에 n을 더해주었다.
처음엔 while문을 사용해서 풀어보고 싶었는데 오래 걸린다길래 없애버렸다. 다른 문제에서 써줄게..!

 

소스코드

class Solution {
    public int[] solution(int[] arr, int n) {
        int[] answer = new int[arr.length];
        
        if (arr.length % 2 != 0) {
            for (int i = 0; i < arr.length; i++) {
                if (i % 2 == 0) {
                    answer[i] = arr[i] + n;
                } else {
                    answer[i] = arr[i];
                }
            }
        } else {
            for (int i = 0; i < arr.length; i++) {
                if (i % 2 != 0) {
                    answer[i] = arr[i] +n;
                } else {
                    answer[i] = arr[i];
                }
            }
        }
        
        return answer;
    }
}

 

반응형