Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Get
- java
- C++
- Python
- redux
- 항해99
- 자바
- 매일메일
- 프로그래머스
- react-router
- JavaScript
- useDispatch
- react-redux
- redux-toolkit
- SW
- maeil-mail
- redux-saga
- sw expert academy
- 테코테코
- 이코테
- 알고리즘
- 리액트
- json-server
- axios
- programmers
- 항해플러스
- createSlice
- Algorithm
- 코딩테스트합격자되기
- react
Archives
- Today
- Total
Binary Journey
[코딩테스트합격자되기-자바편] 문제01. 배열 정렬하기 본문
반응형
💡 해당 풀이는 코딩 테스트 합격자되기 - 자바편 에서 발췌된 내용을 바탕으로 작성되었습니다.
문제
내용
정수 배열을 정렬해서 반환하는 solution()
함수를 완성하세요.
제약 조건
- 정수 배열의 길이는 2 이상 10^5 이하입니다.
- 정수 배열의 각 데이터 값은 -100,000 이상 100,000 이하입니다.
입출력의 예
입력 | 출력 |
[1, -5, 2, 4, 3] | [-5, 1, 2, 3, 4] |
[2, 1, 1, 3, 2, 5, 4] | [1, 1, 2, 2, 3, 4, 5] |
[6, 1, 7] | [1, 6, 7] |
기록하기
💡 어디까지 생각해봤는지 단계적으로 기록해봅니다.
풀이
풀이 시간
시작 시각 | 종료 시각 | 총 소요 시간 |
23:21 | 23:42 | 21분 |
문제 분석
제약 사항 파악 & 테스트 케이스 작성
- 입출력 모두 정수 배열
- 정수 배열의 길이는 2 이상 10^5 이하
- 정수 배열의 각 데이터 값은 -100,000 이상 100,000 이하
정수 배열의 길이가 최대 $10^5$
- 제한시간이 3초라면 O(N^2)은 사용할 수 없습니다.
입력값 분석
💡 입력값을 분석하면 문제에서 요구하는 알고리즘의 시간 복잡도를 간접적으로 파악할 수 있습니다.
입력 | 출력 |
---|---|
[1, -5, 2, 4, 3] | [-5, 1, 2, 3, 4] |
[2, 1, 1, 3, 2, 5, 4] | [1, 1, 2, 2, 3, 4, 5] |
[6, 1, 7] | [1, 6, 7] |
입력값은 1차원 배열이고 출력값은 오름차순의 1차원 배열로 반환된다.
의사 코드 작성
💡 의사 코드는 동작 중심으로 작성하는 것이 중요합니다.
💡 의사 코드는 문제 해결 순서로 작성합니다.
💡 의사 코드를 충분히 테스트해봅니다.
solution(정수형배열) {
Arrays.sort(정수형배열)
return 정수형배열
}
// 배열의 최대 길이가 10^5 이므로 제한 시간이 3초일 경우 시간복잡도가 O(N^2)인 아래 식 사용할 수 없음
solution(정수형배열) {
// bubble sort 이용
for (i;정수형배열길이;++) {
for(j=i+1;정수형배열길이;++) {
if (정수형배열[i] > 정수형배열[j]) {
임시저장소 = 정수형배열[i]
정수형배열[i] = 정수형배열[j]
정수형배열[j] = 임시저장소
}
}
}
return 정수형배열
}
구현
public static int[] solution(int[] arr) {
Arrays.sort(arr);
return arr;
}
// 배열의 최대 길이가 10^5 이므로 제한 시간이 3초일 경우 시간복잡도가 O(N^2)인 아래 식 사용할 수 없음
public static int[] solution(int[] arr) {
// bubble sort 이용
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
복기하기
답안과 나의 풀이를 비교해보세요
답안
원본 배열에서 바로 정렬
public static int[] solution(int[] arr) {
Arrays.sort(arr); // 참고로 sort() API는 O(NlogN)의 시간복잡도를 가진다.
return arr;
}
원본 배열 두고 정렬
public static int[] solution(int[] arr) {
int[] cloned = arr.clone();
Arrays.sort(cloned);
return cloned;
}
O(N^2)알고리즘 사용하여 정렬
public static int[] bubbleSort(int[] org) {
int[] arr = org.clone();
int n = arr.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[i];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
요약하기
sort()
API는 O(NlogN)의 시간복잡도를 가진다.- 원본 배열을 두고 복제 배열 생성을 원할 시
clone()
API를 사용하자.
반응형
'Algorithm > 코딩테스트합격자되기-자바편' 카테고리의 다른 글
[코딩테스트합격자되기-자바편] 문제06. 실패율 (2) | 2024.12.26 |
---|---|
[코딩테스트합격자되기-자바편] 문제05. 행렬의 곱셈 (0) | 2024.12.26 |
[코딩테스트합격자되기-자바편] 문제04. 모의고사 (1) | 2024.12.26 |
[코딩테스트합격자되기-자바편] 문제03. 두 개 뽑아서 더하기 (0) | 2024.12.26 |
[코딩테스트합격자되기-자바편] 문제02. 배열 제어하기 (1) | 2024.12.26 |