문제
문자열 배열
intStrs
와 정수 k
, s
, l
가 주어집니다. intStrs
의 원소는 숫자로 이루어져 있습니다.배열
intStrs
의 각 원소마다 s
번 인덱스에서 시작하는 길이 l
짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k
보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.제한사항
- 0 ≤
s
< 100
- 1 ≤
l
≤ 8
- 10 ≤
k
< 10
l - 1
l
- 1 ≤
intStrs
의 길이 ≤ 10,000 s
+l
≤intStrs
의 원소의 길이 ≤ 120
예시

풀이
문자열 배열
intStrs
에서 각 문자열의 일부 구간만 잘라내고, 그 값을 정수로 변환한 뒤, 주어진 값 k
보다 큰 경우만 추출해서 새로운 배열에 담는 문제이다.각 문자열에서 특정 인덱스 구간을 잘라내기 위해 먼저
toCharArray()
를 사용하여 문자 배열로 변환했다. 이렇게 하면 인덱스를 이용해 개별 문자에 쉽게 접근할 수 있다.잘라낸 구간은
char[]
배열을 순회하면서 temp
라는 문자열에 문자를 하나씩 이어붙이는 방식으로 만들었다. 예를 들어, s = 5
, l = 5
일 때 인덱스 5부터 9까지의 문자를 반복문을 통해 이어붙였다.이후 만들어진 문자열은 정수
k
와 비교해야 하므로, 문자열 상태에서는 비교할 수 없어 Integer.parseInt()
를 사용해 정수로 변환했다. 변환된 결과가 k
보다 클 경우에만 결과 리스트에 저장하도록 했다.결과를 담을 컬렉션으로는
ArrayList
를 사용했는데, 이는 조건을 만족하는 값이 몇 개인지 미리 알 수 없기 때문이다. 리스트에 값을 추가한 후, 최종적으로 결과를 int[]
배열 형태로 반환해야 하므로 ArrayList
에서 하나씩 값을 꺼내어 정수 배열에 복사했다.import java.util.ArrayList;
public class Ex35 {
public static void main(String[] args) {
String[] intStrs = {"0123456789", "9876543210", "9999999999999"};
int k = 50000;
int s = 5;
int l = 5;
ArrayList<Integer> sol = new ArrayList<>();
for (int i = 0; i < intStrs.length; i++) {
char[] stringChar = intStrs[i].toCharArray();
String temp = "";
for (int j = s; j < s + l; j++) {
temp = temp + stringChar[j];
}
int result = Integer.parseInt(temp);
if (result > k) {
sol.add(result);
}
}
int[] answer = new int[sol.size()];
for (int i = 0; i < sol.size(); i++) {
answer[i] = sol.get(i);
}
}
}

Share article