2024. 11. 20. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12935
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요.
단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요.
예를 들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
| arr | return |
| [4,3,2,1] | [4,3,2] |
| [10] | [-1] |
주어진 배열에서 가장 작은 값을 제거한 다음, 배열을 다시 반환하는 문제입니다.
정렬을 사용하기도 애매하죠, 예시로 [2, 4, 1, 3]가 있다면 반환 값은 [2, 4, 3]가 되어야 할 테니까요.
따라서 우리는 최소값을 찾아서 해당 값만 핀 포인트로 삭제하고 문제를 풀어야 합니다.
특별히 다른 함수를 사용하지 않는다면, 이 문제는 두 개의 반복문을 사용해서 풀 수 있을 것 같습니다.
첫 번째 반복문에서는 최솟값을 찾고, 두 번째 반복문에서는 해당 최솟값이 아닌 값들만 배열에 저장하도록 할 수 있겠죠.
자바는 반복문을 사용해서, 그 다음 파이썬에서는 최솟값의 인덱스를 찾아 슬라이싱하는 방법을 사용할 예정입니다.
또한 이 문제에서 중요한 조건이 있는데, 바로
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
이 조건으로, 모든 배열의 값은 중복되지 않는다는 뜻이죠.
따라서 이 문제에서는 배열의 길이가 1일 때는 무조건 [-1] 배열이 반환되고, 2 이상일 때는 최솟값을 제거한 배열이 반환됩니다.
이 힌트들을 바탕으로 정답 코드를 작성해보겠습니다.
1. 자바
class Solution {
public int[] solution(int[] arr) {
// arr 배열의 길이를 저장합니다.
int len = arr.length;
// 해당 값이 1이라면 빈 배열이므로 [-1]을 반환합니다.
if (len == 1) {
return new int[]{-1};
}
// arr 배열의 길이가 2 이상인 경우
// answer 배열을 선언합니다.
int[] answer = new int[arr.length - 1];
// 초기 최솟값은 MAX_VALUE로 설정합니다.
int minN = Integer.MAX_VALUE;
// 초기 최솟값 인덱스는 0으로 설정합니다.
int minIdx = 0;
// 반복문을 통해 최솟값과 인덱스를 찾습니다.
for (int i=0; i<len; i++) {
if (minN > arr[i]) {
minN = arr[i];
minIdx = i;
}
}
// 인덱스를 설정합니다.
int idx = 0;
// 반복문을 통해 최솟값이 아닌 값들만 answer에 추가합니다.
for (int i=0; i<len; i++) {
if (minN != arr[i]) {
answer[idx++] = arr[i];
}
}
// answer을 반환합니다.
return answer;
}
}
2. 파이썬
def solution(arr):
# 최솟값 minN을 찾습니다.
minN = min(arr)
# 최솟값의 인덱스를 찾습니다.
minIdx = arr.index(minN)
# 해당 인덱스를 기준으로 슬라이싱합니다.
answer = arr[:minIdx] + arr[minIdx + 1:]
# answer가 비어있다면 [-1]을 반환합니다.
return answer or [-1]
내부적으로 둘의 시간 복잡도는 동일할 것 같네요.
'입문문제' 카테고리의 다른 글
| [연습문제] 최대공약수와 최소공배수 (0) | 2024.11.22 |
|---|---|
| [연습문제] 짝수와 홀수 (0) | 2024.11.21 |
| [연습문제] 정수 제곱근 판별 (0) | 2024.11.18 |
| [연습문제] 정수 내림차순으로 배치하기 (1) | 2024.11.16 |
| [연습문제] 자연수 뒤집어 배열로 만들기 (0) | 2024.11.14 |