
프로그래머스에서 낸 코딩 문제에 대한 해답이 들어있습니다.
열람 시 주의해주세요.

n 번째 원소부터
정수 리스트 num_list와 정수 n이 주어질 때, n 번째 원소부터 마지막 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.
문제 해설
전에 했던 문제와 비슷하므로, Arrays.copyOfRange로 시작점과 끝점을 잡아 복사하면 된다. 주의할 점은 n번째부터라고 했으니 n - 1로 시작해야한다(0으로 시작하기 때문에).
정답
import java.util.Arrays;
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = {};
answer = Arrays.copyOfRange(num_list, n - 1,num_list.length);
return answer;
}
}
순서 바꾸기
정수 리스트 num_list와 정수 n이 주어질 때, num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.
문제 해설
이전에 했던 j를 사용하여 j++을 응용하면 쉽다.
일단 i가 n에서 시작하고, answer.length까지 for문에서 순회하여 answer[0]에서부터 연산해간다.
이후로 새로이 for문을 사용하여 마찬가지로 j++을 사용한다. 이 때, j를 미리 초기화시켜두고 for문 안에서 j++만 해둔다면 따로 순서를 저장해둘 필요가 없다.
정답
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = {};
int j = 0;
answer = new int[num_list.length];
for(int i = n; i < answer.length; i++){
answer[j++] = num_list[i];
}
for(int i = 0; i < n; i++){
answer[j++] = num_list[i];
}
return answer;
}
}
두 번째로 좋아요를 많이 받은 것과 일치한다. 첫번째는 IntStream을 사용하였는데, IntStream에 대해서는 나중에 배워나갈 것이라 생략한다.
왼쪽 오른쪽
문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.
문제 해설
l이 바로 나오면 그 상태에서 바로 순회를 중단하고 값을 내놓으면 된다. 마찬가지로 바로 r이 나오면 중단하고 내놓는 형태. if문을 for문 안에 넣어두면 먼저 나오는 l과 r에 따라서 바로 반환할 수 있게 된다.
정답
class Solution {
public String[] solution(String[] str_list) {
String[] answer = {};
for(int i = 0; i < str_list.length; i++) {
if(str_list[i].equals("l")) {
if(i == 0) {
return answer;
}
answer = new String[i];
for(int j = 0; j < answer.length; j++) {
answer[j] = str_list[j];
}
break;
} else if(str_list[i].equals("r")) {
if(i == (str_list.length - 1)) {
return answer;
}
answer = new String[(str_list.length - i - 1)];
for(int j = 0; j < answer.length; j++){
answer[j] = str_list[(i + j + 1)];
}
break;
}
}
return answer;
}
}
제일 좋아요를 많이 받은 것. 이것 또한 copyOfRange를 사용하면 되며, 바로 return 시키면 따로 break 처리하지 않아도 된다.
import java.util.Arrays;
class Solution {
public String[] solution(String[] str_list) {
for (int i = 0; i < str_list.length; i++) {
if ("l".equals(str_list[i])) {
return Arrays.copyOfRange(str_list, 0, i);
} else if ("r".equals(str_list[i])) {
return Arrays.copyOfRange(str_list, i + 1, str_list.length);
}
}
return new String[0];
}
}
n 번째 원소까지
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 n 번째 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.
문제 해설
copyOfRange로 0부터 n까지 잡으면 된다.
정답
import java.util.Arrays;
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = {};
answer = Arrays.copyOfRange(num_list, 0, n);
return answer;
}
}
제일 많은 좋아요를 받은 정답과 일치한다.
n개 간격의 원소들
정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
문제 해설
n개 간격에 주의, 위에서 사용했던 j++을 사용하면 비교적 편해진다.
주의할 것은 answer의 구간 길이를 정하는 부분. 나의 경우 0은 반드시 들어가게 되기 때문에 -1한 값을 n으로 나누어 +1하여 몫으로 처리했다.
정답
class Solution {
public int[] solution(int[] num_list, int n) {
int[] answer = {};
answer = new int[1 + ((num_list.length - 1) / n)];
for(int i = 0, j = 0; i < num_list.length; i += n) {
answer[j++] = num_list[i];
}
return answer;
}
}
제일 많은 좋아요를 받은 정답과 유사하다.
'코테런 > 코딩 기초 트레이닝(완주)' 카테고리의 다른 글
| [코딩 테스트 RUN] 코딩 기초 트레이닝 15일차: 리스트(배열), 문자열 (0) | 2026.02.20 |
|---|---|
| [코딩 테스트 RUN] 코딩 기초 트레이닝 14일차: 리스트(배열) (0) | 2026.02.19 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 12일차: 리스트(배열) (0) | 2026.02.17 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 11일차: 리스트(배열) (0) | 2026.02.16 |
| [코딩 테스트 RUN] 코딩 기초 트레이닝 10일차: 문자열 (0) | 2026.02.15 |
