접미사 배열
문제 설명
어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 알파벳 소문자로만 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 100
입출력 예
my_string result
"banana" ["a", "ana", "anana", "banana", "na", "nana"]
"programmers" ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]
입출력 예 설명
입출력 예 #1
예제 1번의 my_string는 "banana"로 모든 접미사는 문제의 설명과 같습니다. 이를 사전순으로 정렬하면 "a", "ana", "anana", "banana", "na", "nana"이므로 ["a", "ana", "anana", "banana", "na", "nana"]를 return 합니다.
입출력 예 #2
예제 2번의 my_string는 "programmers"이고 모든 접미사는 "programmers", "rogrammers", "ogrammers", "grammers", "rammers", "ammers", "mmers", "mers", "ers", "rs", "s"입니다. 이를 사전순으로 정렬한 문자열 배열 ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]를 return 합니다.
내 풀이
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public String[] solution(String my_string) {
ArrayList<String> strs = new ArrayList<>();
for (int i=0; i<my_string.length(); i++) {
strs.add(my_string.substring(i));
}
Collections.sort(strs);
String[] answer = new String[strs.size()];
int size = 0;
for (String str : strs) {
answer[size++] = str;
}
return answer;
}
}
다른 풀이
import java.util.*;
import java.util.stream.IntStream;
class Solution {
public String[] solution(String myString) {
return IntStream.range(0, myString.length()).mapToObj(myString::substring).sorted().toArray(String[]::new);
}
}
stream api를 사용하면 짧아지고 멋진 것 같지만 장단점이 있다고 하니 상황에 맞춰서 잘 활용하면 좋겠다.
접미사인지 확인하기
문제 설명
어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ my_string의 길이 ≤ 100
1 ≤ is_suffix의 길이 ≤ 100
my_string과 is_suffix는 영소문자로만 이루어져 있습니다.
입출력 예
my_string is_suffix result
"banana" "ana" 1
"banana" "nan" 0
"banana" "wxyz" 0
"banana" "abanana" 0
입출력 예 설명
입출력 예 #1
예제 1번에서 is_suffix가 my_string의 접미사이기 때문에 1을 return 합니다.
입출력 예 #2
예제 2번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.
입출력 예 #3
예제 3번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.
입출력 예 #4
예제 4번에서 is_suffix가 my_string의 접미사가 아니기 때문에 0을 return 합니다.
내 풀이
import java.util.ArrayList;
class Solution {
public int solution(String my_string, String is_suffix) {
int answer = 0;
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < my_string.length(); i++) {
arr.add(my_string.substring(i));
}
if (arr.contains(is_suffix)) {
answer = 1;
}
return answer;
}
}
다른 풀이
class Solution {
public int solution(String my_string, String is_suffix) {
if(my_string.endsWith(is_suffix)) {
return 1;
} else {
return 0;
}
}
}
메서드가 있었다니...
문자열의 앞의 n글자
문제 설명
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 앞의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 숫자와 알파벳으로 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000
1 ≤ n ≤ my_string의 길이
입출력 예
my_string n result
"ProgrammerS123" 11 "ProgrammerS"
"He110W0r1d" 5 "He110"
입출력 예
입출력 예 #1
예제 1번의 my_string에서 앞의 11글자는 "ProgrammerS"이므로 이 문자열을 return 합니다.
입출력 예 #2
예제 2번의 my_string에서 앞의 5글자는 "He110"이므로 이 문자열을 return 합니다.
내 풀이
class Solution {
public String solution(String my_string, int n) {
return my_string.substring(0, n);
}
}
접두사인지 확인하기
문제 설명
어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.
문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ my_string의 길이 ≤ 100
1 ≤ is_prefix의 길이 ≤ 100
my_string과 is_prefix는 영소문자로만 이루어져 있습니다.
입출력 예
my_string is_prefix result
"banana" "ban" 1
"banana" "nan" 0
"banana" "abcd" 0
"banana" "bananan" 0
입출력 예 설명
입출력 예 #1
예제 1번에서 is_prefix가 my_string의 접두사이기 때문에 1을 return 합니다.
입출력 예 #2
예제 2번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.
입출력 예 #3
예제 3번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.
입출력 예 #4
예제 4번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.
내 풀이
import java.util.ArrayList;
class Solution {
public int solution(String my_string, String is_prefix) {
return my_string.startsWith(is_prefix) ? 1 : 0;
}
}
내가 제일 깔끔한 것 같다.
문자열 뒤집기
문제 설명
문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 숫자와 알파벳으로만 이루어져 있습니다.
1 ≤ my_string의 길이 ≤ 1,000
0 ≤ s ≤ e < my_string의 길이
입출력 예
my_string s e result
"Progra21Sremm3" 6 12 "ProgrammerS123"
"Stanley1yelnatS" 4 10 "Stanley1yelnatS"
입출력 예 설명
입출력 예 #1
예제 1번의 my_string에서 인덱스 6부터 인덱스 12까지를 뒤집은 문자열은 "ProgrammerS123"이므로 "ProgrammerS123"를 return 합니다.
입출력 예 #2
예제 2번의 my_string에서 인덱스 4부터 인덱스 10까지를 뒤집으면 원래 문자열과 같은 "Stanley1yelnatS"이므로 "Stanley1yelnatS"를 return 합니다.
내 풀이
class Solution {
public String solution(String my_string, int s, int e) {
char[] arr = my_string.toCharArray();
for (int i = s; i <= (s + e) / 2; i++) {
char temp = arr[i];
arr[i] = arr[s + e - i];
arr[s + e - i] = temp;
}
return new String(arr);
}
}
세로 읽기
문제 설명
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string은 영소문자로 이루어져 있습니다.
1 ≤ m ≤ my_string의 길이 ≤ 1,000
m은 my_string 길이의 약수로만 주어집니다.
1 ≤ c ≤ m
입출력 예
my_string m c result
"ihrhbakrfpndopljhygc" 4 2 "happy"
"programmers" 1 1 "programmers"
입출력 예 설명
입출력 예 #1
예제 1번의 my_string을 한 줄에 4 글자씩 쓰면 다음의 표와 같습니다.
1열 2열 3열 4열
i h r h
b a k r
f p n d
o p l j
h y g c
2열에 적힌 글자를 세로로 읽으면 happy이므로 "happy"를 return 합니다.
입출력 예 #2
예제 2번의 my_string은 m이 1이므로 세로로 "programmers"를 적는 것과 같고 따라서 1열에 적힌 글자를 세로로 읽으면 programmers입니다. 따라서 "programmers"를 return 합니다.
내 풀이
class Solution {
public String solution(String my_string, int m, int c) {
String answer = "";
String[] arr = my_string.split("(?<=\\G.{" + m + "})");
for (String str : arr) {
char[] charArr = str.toCharArray();
answer += charArr[c-1];
}
return answer;
}
}
다른 풀이
class Solution {
public String solution(String my_string, int m, int c) {
String answer = "";
for (int i = c - 1; i < my_string.length(); i += m) {
answer += my_string.charAt(i);
}
return answer;
}
}
qr code
문제 설명
두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
0 ≤ r < q ≤ 20
r < code의 길이 ≤ 1,000
code는 영소문자로만 이루어져 있습니다.
입출력 예
q r code result
3 1 "qjnwezgrpirldywt" "jerry"
1 0 "programmers" "programmers"
입출력 예 설명
입출력 예 #1
예제 1번의 q와 r은 각각 3, 1이고 인덱스와 그 값을 q로 나눈 나머지가 잘 보이도록 표로 만들면 다음과 같습니다.
code q j n w e z g r p i r l d y w t
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
q로 나눈 나머지 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0
q로 나눈 나머지가 1인 인덱스의 문자들을 앞에서부터 순서대로 이어 붙이면 "jerry"가 되므로 이를 return 합니다.
입출력 예 #2
예제 2번의 q와 r은 각각 1, 0이고 인덱스와 그 값을 q로 나눈 나머지가 잘 보이도록 표로 만들면 다음과 같습니다.
code p r o g r a m m e r s
index 0 1 2 3 4 5 6 7 8 9 10
q로 나눈 나머지 0 0 0 0 0 0 0 0 0 0 0
q로 나눈 나머지가 1인 인덱스의 문자들을 앞에서부터 순서대로 이어 붙이면 "programmers"가 되므로 이를 return 합니다.
내 풀이
class Solution {
public String solution(int q, int r, String code) {
String answer = "";
char[] arr = code.toCharArray();
for (int i=0; i<code.length(); i++) {
if (i % q == r) {
answer += arr[i];
}
}
return answer;
}
}
문자 개수 세기
문제 설명
알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ my_string의 길이 ≤ 1,000
입출력 예
my_string result
"Programmers" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]
입출력 예 설명
입출력 예 #1
예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.
내 풀이
class Solution {
public int[] solution(String my_string) {
int[] answer = new int[52];
char[] arr = my_string.toCharArray();
for (char c : arr) {
int idx = c < 'a' ? c-65 : c-71;
answer[idx]++;
}
return answer;
}
}
아스키 코드를 다 외워야 하나.... 검색을 안하려고 했는데 안할 수가 없었다...
배열 만들기1
문제 설명
정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ n ≤ 1,000,000
1 ≤ k ≤ min(1,000, n)
입출력 예
n k result
10 3 [3, 6, 9]
15 5 [5, 10, 15]
입출력 예 설명
입출력 예 #1
1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.
입출력 예 #2
1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.
내 풀이
import java.util.ArrayList;
class Solution {
public int[] solution(int n, int k) {
ArrayList<Integer> arr = new ArrayList<>();
for (int i=1; i<=n; i++) {
if (i % k == 0) {
arr.add(i);
}
}
int[] answer = new int[arr.size()];
int size = 0;
for (int num : arr) {
answer[size++] = num;
}
return answer;
}
}
다른 풀이
class Solution {
public int[] solution(int n, int k) {
int count = n / k;
int[] answer = new int[count];
for (int i = 1; i <= count; i++) {
answer[i - 1] = k * i;
}
return answer;
}
}
조건문을 만들지도 않고 배열 할당도 바로 하는 방법을 몰랐다니...
글자 지우기
문제 설명
문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ indices의 길이 < my_string의 길이 ≤ 100
my_string은 영소문자로만 이루어져 있습니다
0 ≤ indices의 원소 < my_string의 길이
indices의 원소는 모두 서로 다릅니다.
입출력 예
my_string indices result
"apporoograpemmemprs" [1, 16, 6, 15, 0, 10, 11, 3] "programmers"
입출력 예 설명
입출력 예 #1
예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
my_string a p p o r o o g r a p e m m e m p r s
indices에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니다.
내 풀이
import java.util.*;
class Solution {
public String solution(String my_string, int[] indices) {
StringBuilder sb = new StringBuilder(my_string);
for (int idx : indices) {
sb.setCharAt(idx, ' ');
}
return sb.toString().replace(" ", "");
}
}
카운트 다운
문제 설명
정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
0 ≤ end_num ≤ start_num ≤ 50
입출력 예
start_num end_num result
10 3 [10, 9, 8, 7, 6, 5, 4, 3]
입출력 예 설명
입출력 예 #1
10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.
내 풀이
class Solution {
public int[] solution(int start, int end_num) {
int[] answer = new int[start - end_num + 1];
int count = 0;
for (int i = start; i >= end_num; i--) {
answer[count++] = i;
}
return answer;
}
}
가까운 1 찾기
문제 설명
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
제한사항
3 ≤ arr의 길이 ≤ 100'000
arr의 원소는 전부 1 또는 0입니다.
입출력 예
arr idx result
[0, 0, 0, 1] 1 3
[1, 0, 0, 1, 0, 0] 4 -1
[1, 1, 1, 1, 0] 3 3
입출력 예 설명
입출력 예 #1
1보다 크면서 원소가 1인 가장 작은 인덱스는 3입니다. 따라서 3을 return 합니다.
입출력 예 #2
4번 인덱스 이후에 1은 등장하지 않습니다. 따라서 -1을 return 합니다.
입출력 예 #3
3번 인덱스의 값이 1입니다. 따라서 3을 return 합니다.
class Solution {
public int solution(int[] arr, int idx) {
int answer = 0;
for (int i = 0; i< arr.length; i++) {
if (i >= idx && arr[i] == 1) {
answer = i;
break;
} else {
answer = -1;
}
}
return answer;
}
}
리스트 자르기
문제 설명
정수 n과 정수 3개가 담긴 리스트 slicer 그리고 정수 여러 개가 담긴 리스트 num_list가 주어집니다. slicer에 담긴 정수를 차례대로 a, b, c라고 할 때, n에 따라 다음과 같이 num_list를 슬라이싱 하려고 합니다.
n = 1 : num_list의 0번 인덱스부터 b번 인덱스까지
n = 2 : num_list의 a번 인덱스부터 마지막 인덱스까지
n = 3 : num_list의 a번 인덱스부터 b번 인덱스까지
n = 4 : num_list의 a번 인덱스부터 b번 인덱스까지 c 간격으로
올바르게 슬라이싱한 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
n 은 1, 2, 3, 4 중 하나입니다.
slicer의 길이 = 3
slicer에 담긴 정수를 차례대로 a, b, c라고 할 때
0 ≤ a ≤ b ≤ num_list의 길이 - 1
1 ≤ c ≤ 3
5 ≤ num_list의 길이 ≤ 30
0 ≤ num_list의 원소 ≤ 100
입출력 예
n slicer num_list result
3 [1, 5, 2] [1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 3, 4, 5, 6]
4 [1, 5, 2] [1, 2, 3, 4, 5, 6, 7, 8, 9] [2, 4, 6]
입출력 예 설명
입출력 예 #1
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 자른 리스트는 [2, 3, 4, 5, 6]입니다.
입출력 예 #2
[1, 2, 3, 4, 5, 6, 7, 8, 9]에서 1번 인덱스부터 5번 인덱스까지 2개 간격으로 자른 리스트는 [2, 4, 6]입니다.
import java.util.*;
class Solution {
public int[] solution(int n, int[] slicer, int[] num_list) {
ArrayList<Integer> arr = new ArrayList<>();
int a = slicer[0];
int b = slicer[1];
int c = slicer[2];
switch(n) {
case 1:
for (int i = 0; i <= b; i++) {
arr.add(num_list[i]);
}
break;
case 2:
for (int i = a; i < num_list.length; i++) {
arr.add(num_list[i]);
}
break;
case 3:
for (int i = a; i <= b; i++) {
arr.add(num_list[i]);
}
break;
case 4:
for (int i = a; i <= b; i += c) {
arr.add(num_list[i]);
}
break;
}
int[] answer = arr.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
}
코드가 조금 번잡스러운 것 같아서 마음에 들지는 않지만 우선 통과했으니...
첫번째로 나오는 음수
문제 설명
정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.
제한사항
5 ≤ num_list의 길이 ≤ 100
-10 ≤ num_list의 원소 ≤ 100
입출력 예
num_list result
[12, 4, 15, 46, 38, -2, 15] 5
[13, 22, 53, 24, 15, 6] -1
입출력 예 설명
입출력 예 #1
5번 인덱스에서 음수가 처음 등장하므로 5를 return합니다.
입출력 예 #2
음수가 없으므로 -1을 return합니다.
class Solution {
public int solution(int[] num_list) {
for (int i = 0; i < num_list.length; i++) {
if (num_list[i] < 0) {
return i;
}
}
return -1;
}
}
배열 만들기 3
문제 설명
정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.
intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.
이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.
제한사항
1 ≤ arr의 길이 ≤ 100,000
1 ≤ arr의 원소 < 100
1 ≤ a1 ≤ b1 < arr의 길이
1 ≤ a2 ≤ b2 < arr의 길이
입출력 예
arr intervals result
[1, 2, 3, 4, 5] [[1, 3], [0, 4]] [2, 3, 4, 1, 2, 3, 4, 5]
입출력 예 설명
입출력 예 #1
첫 번째 구간에 해당하는 배열은 [2, 3, 4] 입니다.
두 번째 구간에 해당하는 배열은 [1, 2, 3, 4, 5] 입니다.
따라서 이 두 배열을 앞뒤로 붙인 배열인 [2, 3, 4, 1, 2, 3, 4, 5]를 return 합니다.
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] intervals) {
ArrayList<Integer> arrList = new ArrayList<>();
for (int[] interval : intervals) {
int start = interval[0];
int end = interval[1];
for (int i = start; i <= end; i++) {
arrList.add(arr[i]);
}
}
int[] answer = arrList.stream().mapToInt(Integer::intValue).toArray();
return answer;
}
}
2의 영역
문제 설명
정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해 주세요.
단, arr에 2가 없는 경우 [-1]을 return 합니다.
제한사항
1 ≤ arr의 길이 ≤ 100,000
1 ≤ arr의 원소 ≤ 10
입출력 예
arr result
[1, 2, 1, 4, 5, 2, 9] [2, 1, 4, 5, 2]
[1, 2, 1] [2]
[1, 1, 1] [-1]
[1, 2, 1, 2, 1, 10, 2, 1] [2, 1, 2, 1, 10, 2]
입출력 예 설명
입출력 예 #1
2가 있는 인덱스는 1번, 5번 인덱스뿐이므로 1번부터 5번 인덱스까지의 부분 배열인 [2, 1, 4, 5, 2]를 return 합니다.
입출력 예 #2
2가 한 개뿐이므로 [2]를 return 합니다.
입출력 예 #3
2가 배열에 없으므로 [-1]을 return 합니다.
입출력 예 #4
2가 있는 인덱스는 1번, 3번, 6번 인덱스이므로 1번부터 6번 인덱스까지의 부분 배열인 [2, 1, 2, 1, 10, 2]를 return 합니다.
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
ArrayList<Integer> arrList = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
arrList.add(i);
}
}
if (arrList.size() == 0) {
int[] answer = new int[1];
answer[0] = -1;
return answer;
}
int[] answer = Arrays.copyOfRange(arr, arrList.get(0), arrList.get(arrList.size() - 1) + 1);
return answer;
}
}
배열 조각하기
문제 설명
정수 배열 arr와 query가 주어집니다.
query를 순회하면서 다음 작업을 반복합니다.
짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.
홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.
위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.
제한사항
5 ≤ arr의 길이 ≤ 100,000
0 ≤ arr의 원소 ≤ 100
1 ≤ query의 길이 < min(50, arr의 길이 / 2)
query의 각 원소는 0보다 크거나 같고 남아있는 arr의 길이 보다 작습니다.
입출력 예
arr query result
[0, 1, 2, 3, 4, 5] [4, 1, 2] [1, 2, 3]
입출력 예 설명
입출력 예 #1
이번에 매번 처리할 query의 값과 처리 전후의 arr의 상태를 표로 나타내면 다음과 같습니다.
query의 값 query 처리 전 query 처리 후 비고
4 [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4] 0번 인덱스의 쿼리이므로 뒷부분을 자른다.
1 [0, 1, 2, 3, 4] [1, 2, 3, 4] 1번 인덱스의 쿼리이므로 앞부분을 자른다.
2 [1, 2, 3, 4] [1, 2, 3] 2번 인덱스의 쿼리이므로 뒷부분을 자른다.
따라서 [1, 2, 3]을 return 합니다.
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] query) {
for (int i = 0; i < query.length; i++) {
if (i % 2 == 0) {
arr = Arrays.copyOfRange(arr, 0, query[i] + 1);
} else {
arr = Arrays.copyOfRange(arr, query[i], arr.length);
}
}
return arr;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level0 - 안전지대 (0) | 2024.07.17 |
---|---|
코딩 기초 트레이닝 9 (1) | 2023.09.18 |
코딩 기초 트레이닝 7 (0) | 2023.09.04 |
코딩 기초 트레이닝 6 (2) | 2023.09.03 |
코딩 기초 트레이닝 5 (0) | 2023.08.04 |