2024. 5. 14. 20:05ㆍ코딩테스트 리뷰(프로그래머스)/코딩 기초 트레이닝 with Java
문제.1 - 리스트 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/181897
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 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 함수를 완성해주세요. |
import java.util.*;
class Solution {
public int[] solution(int n, int[] slicer, int[] num_list) {
ArrayList<Integer> result = new ArrayList<>();
int start_num = 0, end_num = num_list.length, count = 1;
switch( n ) {
case 1 : {
end_num = slicer[1];
}
break;
case 2 : {
start_num = slicer[0];
}
break;
case 3 : {
start_num = slicer[0];
end_num = slicer[1];
}
break;
case 4: {
start_num = slicer[0];
end_num = slicer[1];
count = slicer[2];
}
}
for ( int i = start_num; i <= end_num && i < num_list.length; i += count ) {
result.add( num_list[i] );
}
int[] answer = new int[result.size()];
for ( int i = 0; i < result.size(); i++ ) {
answer[i] = result.get(i);
}
return answer;
}
}
문제 해설
a, b, c 를 간단하게 바꾸면 a는 시작 인덱스, b는 끝나는 인덱스, c는 간격이다
switch 문에서 시작인덱스, 끝인덱스, 간격을 초기화한다음
마지막에서 arraylist 에 넣고 int[] 로 변형하였다.
문제.2 - 첫 번째로 나오는 음수
https://school.programmers.co.kr/learn/courses/30/lessons/181896
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 리스트 num_list 가 주어질 때, 첫 번쨰로 나오는 음수의 인덱스를 return 하는 solution 함수를 완성해주세요. 음수가 없다면 -1을 return 합니다. |
class Solution {
public int solution(int[] num_list) {
int answer = -1;
for( int i = 0; i < num_list.length; i++ ) {
if( num_list[i] < 0 ) return i;
}
return answer;
}
}
문제.3 - 배열 만들기 3
https://school.programmers.co.kr/learn/courses/30/lessons/181895
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다. intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다. 이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해주세요. |
import java.util.ArrayList;
class Solution {
public int[] solution(int[] arr, int[][] intervals) {
ArrayList<Integer> result = new ArrayList<>();
for ( int[] interval : intervals ) {
for( int i = interval[0]; i <= interval[1] && i < arr.length; i++) {
result.add(arr[i]);
}
}
int[] answer = new int[result.size()];
for( int i = 0; i < result.size(); i++ ) {
answer[i] = result.get(i);
}
return answer;
}
}
문제.4 - 2의 영역
https://school.programmers.co.kr/learn/courses/30/lessons/181894
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 배열 arr가 주어집니다. 배열 안의 2가 모두 포함된 가장 작은 연속된 부분 배열을 return 하는 solution 함수를 완성해주세요. 단, arr에 2가 없는 경우 [-1]를 return 합니다. |
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
// ArrayList<Integer> result = new ArrayList<>();
int start_point = -1, end_point = 0;
//시작점 찾기
for( int i = 0; i < arr.length; i++ ) {
if( arr[i] == 2 ) {
start_point = i;
break;
}
}
// start_point 가 -1 인 경우 2가 없음
if( start_point == -1 ) return new int[]{-1};
// 끝나는점 찾기
for( int i = arr.length-1; i > 0; i-- ) {
if( arr[i] == 2) {
end_point = i;
break;
}
}
// 시작점 과 끝점이 같으면 2는 하나
if( start_point == end_point ) return new int[]{2};
return Arrays.copyOfRange(arr, start_point, end_point+1);
}
}
문제.5 - 배열 조각하기
https://school.programmers.co.kr/learn/courses/30/lessons/181893
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명 정수 배열 arr와 query가 주어집니다. query를 순회하면서 다음 작업을 반복합니다. - 짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i] 번 인덱스 뒷부분을 잘라서 버립니다. - 홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i] 번 인덱스 앞부분을 잘라서 버립니다. 위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해주세요. |
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] query) {
int[] answer = arr;
// answer 배열을 계속 변형
for( int index = 0; index < query.length; index++) {
if( index % 2 == 0 ) {
// 짝수 일때 처음부터 query[index] 까지 자르기
answer = Arrays.copyOfRange(answer, 0, query[index]+1);
} else {
// 홀수 일때 query[index]~ 배열끝 까지 자르기
answer = Arrays.copyOfRange(answer, query[index], answer.length);
}
}
return answer;
}
}
문제 해설
문제 설명이 읽기가 어렵게 되어있어서 추가적인 설명을 남깁니다.
문제 설명에서 인덱스가 2개가 나오는데,
짝수 , 홀수 인덱스는 위에 코드에서 보이는 index를 말합니다.
그리고 query[i] 번 인덱스는 arr 자르는 위치을 의미합니다.
즉, for 문 안에 index가 짝수, 홀수를 확인하고, query[index]를 확인하여 index뒷 부분을 자르는 건지 앞부분을 자르는 건지 확인하면됩니다.
예시)
arr = [0,1,2,3,4,5]
query = [4,1,2]
result = [1,2,3]
query[0] = 4 일때,
index는 0(짝수) 이므로 arr[4]를 제외한 뒷 부분을 잘라버립니다.
arr = [0,1,2,3,4]
query[1] = 1 일때,
index는 1(홀수) 이므로 arr[1] 를 제외한 앞부분을 잘라버립니다.
arr = [1,2,3,4]
query[2] = 2 일때,
index는 2(짝수) 이므로 arr[2] 를 제외한 뒷부분을 잘러버립니다.
arr = [1,2,3]
즉, arr = [1,2,3] return 합니다.
느낀점
코딩 기초 트레이닝 한 10일짜리인줄 알았는데 확인해보니 25일까지 있더군요..
산타면서 다 온거같은데 아직 중간인 느낌입니다 ㅋ
'코딩테스트 리뷰(프로그래머스) > 코딩 기초 트레이닝 with Java' 카테고리의 다른 글
코딩 기초 트레이닝 Day 14 with Java (3) | 2024.05.22 |
---|---|
코딩 기초 트레이닝 Day 13 with Java (2) | 2024.05.15 |
코딩 기초 트레이닝 Day 11 with Java (2) | 2024.05.12 |
코딩 기초 트레이닝 Day 10 with Java (3) | 2024.05.10 |
코딩 기초 트레이닝 Day 9 with Java (0) | 2024.05.08 |