Post

[Programmers] #181912 - 배열 만들기 5 [Java][C++][Python]

문자열에서 부분 문자열을 잘라 정수로 변환한 뒤 조건에 맞는 값만 모으는 워밍업 문제.

[Programmers] #181912 - 배열 만들기 5 [Java][C++][Python]

문제 링크


1. 아이디어

intStrs의 각 원소에서 인덱스 s부터 길이 l만큼의 부분 문자열을 잘라 정수로 변환하고, 그 값이 k보다 큰 경우만 결과에 담으면 되는 문제다. k가 항상 자릿수 l에 맞는 범위($10^{l-1} \le k < 10^l$)로 주어지므로 변환한 값과 곧바로 크기 비교를 하면 된다.


2. 복잡도

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

($N$ = intStrs의 길이, $L$ = l)


3. 코드

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

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.*;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        List<Integer> list = new ArrayList<>();
        for (String str : intStrs) {
            int x = Integer.parseInt(str.substring(s, s + l));
            if (x > k) list.add(x);
        }

        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<string> intStrs, int k, int s, int l) {
    vector<int> v;
    for (auto& str : intStrs) {
        int x = stoi(str.substr(s, l));
        if (x > k) v.push_back(x);
    }

    return v;
}
1
2
def solution(intStrs, k, s, l):
    return [int(a[s : s + l]) for a in intStrs if int(a[s : s + l]) > k]

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