Post

[Programmers] #181882 - 조건에 맞게 수열 변환하기 1 [Java][C++][Python]

정수 배열의 각 원소를 50 이상 짝수면 절반으로, 50 미만 홀수면 두 배로 바꾼 결과 배열을 구하는 워밍업 문제.

[Programmers] #181882 - 조건에 맞게 수열 변환하기 1 [Java][C++][Python]

문제 링크


1. 아이디어

각 원소는 다른 원소와 무관하게 변환되므로 배열을 한 번 순회하며 처리한다. 값이 50 이상이면서 짝수이면 2로 나누고, 50 미만이면서 홀수이면 2를 곱한다. 두 조건은 동시에 성립할 수 없으므로 분기 순서는 결과에 영향을 주지 않으며, 어느 쪽에도 해당하지 않는 값은 그대로 둔다.


2. 복잡도

접근시간공간
풀이$O(N)$$O(N)$

($N$ = arr의 길이)


3. 코드

풀이 [Java][C++][Python]

1
2
3
4
5
6
7
8
9
10
11
12
13
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] /= 2;
            } else if (arr[i] < 50 && arr[i] % 2 != 0) {
                arr[i] *= 2;
            }
        }

        return arr;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<int> arr) {
    for (int& x : arr) {
        if (x >= 50 && x % 2 == 0) {
            x /= 2;
        } else if (x < 50 && x % 2) {
            x *= 2;
        }
    }

    return arr;
}
1
2
3
4
5
6
7
8
9
10
def solution(arr):

    def transform(x):
        if x >= 50 and x % 2 == 0:
            return x // 2
        if x < 50 and x % 2:
            return x * 2
        return x

    return [transform(x) for x in arr]

This post is licensed under CC BY 4.0 by the author.