Blog

조건에 맞게 수열 변환하기 1

날짜 2023-10-18
사용 언어 Java
문제 유형 반복문, 배열
정답률 89%
문제 URL https://school.programmers.co.kr/learn/courses/30/lessons/181882

문제 #

문제 설명 #

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

제한사항 #
  • 1 ≤ arr의 길이 ≤ 1,000,000
    • 1 ≤ arr의 원소의 값 ≤ 100

나의 풀이 #

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

새로운 배열을 생성하는 대신 기존 배열을 수정하는 방식으로 작성 가능

class Solution {
    public int[] solution(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 50 && arr[i] % 2 == 0) {
                arr[i] = arr[i] / 2;
            } else if (arr[i] < 50 && arr[i] % 2 == 1) {
                arr[i] = arr[i] * 2;
            }
        }
        return arr;
    }
}

다른 사람의 풀이 #

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        return Arrays.stream(arr).map(operand -> operand >= 50 && operand % 2 == 0 ? operand / 2 : operand < 50 && operand % 2 == 1 ? operand * 2 : operand).toArray();
    }
}

삼항 연산자를 풀어 쓸 경우

.map(operand -> {
	if (operand >= 50 && operand % 2 == 0) return operand / 2;
	else if (operand < 50 && operand % 2 == 1) return operand * 2;
	else return operand;
})
테스트 결과
테스트 1 〉 통과 (2.10ms, 72.8MB)
테스트 2 〉 통과 (3.17ms, 70.7MB)
테스트 3 〉 통과 (2.59ms, 72MB)
테스트 4 〉 통과 (2.47ms, 72.5MB)
테스트 5 〉 통과 (2.27ms, 72.2MB)
테스트 6 〉 통과 (2.66ms, 79.7MB)
테스트 7 〉 통과 (2.79ms, 75.9MB)
테스트 8 〉 통과 (2.68ms, 70.7MB)
테스트 9 〉 통과 (25.77ms, 82.8MB)
테스트 10 〉 통과 (21.17ms, 150MB)
테스트 11 〉 통과 (9.30ms, 93.9MB)

관련개념 학습 #

Arrays