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 | 29 | 30 | 31 |
Tags
- ModelViewPresenter
- pattern
- CodingTestJava
- ScreenSize
- baekjoon
- 오블완
- Java
- 코테
- 자바
- 뷰바인딩
- 안드로이드
- programmers
- 코딩테스트 JAVA
- javaCoding
- 코틀린
- 코테자바
- 코딩테스트
- Coding-Test
- 티스토리챌린지
- CodingTest
- BottomNavigation
- viewpager2
- JavaCodingTest
- 화면 크기 구하기
- 자바 코딩테스트
- 백준
- 코딩테스트 자바
- kotlin
- 산타 환급반
- Android
Archives
- Today
- Total
KDLiam
[Programmers 코딩 기초 트레이닝 : Java] 수열과 구간 쿼리 3 본문
🔗 문제 링크
💡 문제 요약
- 정수 배열 arr과 2차원 배열 queries가 주어집니다.
- queries의 각 쿼리 [i, j]에 대해 arr[i]와 arr[j]를 swap합니다.
- 모든 쿼리를 수행한 후 배열을 반환합니다.
예:
arr = [1,2,3,4], queries = [[0,2],[1,3]]
- swap(0,2) → [3,2,1,4]
- swap(1,3) → [3,4,1,2]
결과 → [3,4,1,2]
🧩 내가 작성한 코드
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int temp;
int[] answer = Arrays.copyOf(arr, arr.length);
for(int[] query : queries) {
temp = answer[query[0]];
answer[query[0]] = answer[query[1]];
answer[query[1]] = temp;
}
return answer;
}
}
💡 코드 설명
- 배열 복사
- Arrays.copyOf(arr, arr.length) → arr 원본을 유지하면서 작업
- 각 쿼리 순회
- 쿼리 [i,j]마다 answer[i]와 answer[j] swap
- 최종 배열 반환
⚡ 성능 분석
항목내용
| 시간 복잡도 | O(n + q) |
- n = arr 길이 (복사)
- q = queries 길이 (swap) |
| 공간 복잡도 | O(n) → 배열 복사로 answer 생성 |
| 성능 평가 | ✅ 충분히 효율적, swap만 반복하므로 최적 수준 |
📝 개선 여지
- 원본 배열을 변경 가능하면
- Arrays.copyOf 생략 → 공간 절약 가능 (O(1))
for(int[] query : queries){ int t = arr[query[0]]; arr[query[0]] = arr[query[1]]; arr[query[1]] = t; } return arr; - 쿼리 수가 매우 많다면
- 최적화 가능: 인덱스 매핑 배열을 두고 마지막에 한 번만 정렬
- 하지만 대부분 문제에서는 불필요
💡 핵심 포인트
- 원본 배열을 유지해야 하면 Arrays.copyOf 사용
- swap 구현 시 임시 변수 temp 필요
- 성능 최적화는 이미 충분히 효율적임 → 가독성 & 안정성 중요
'Problems(Java) > Programmers' 카테고리의 다른 글
| [Programmers 코딩 기초 트레이닝 : Java] 수열과 구간 쿼리 4 (0) | 2025.10.13 |
|---|---|
| [Programmers 코딩 기초 트레이닝 : Java] 수열과 구간 쿼리 2 (0) | 2025.10.13 |
| [Programmers 코딩 기초 트레이닝 : Java] 수 조작하기 2 (0) | 2025.10.13 |
| [Programmers 코딩 기초 트레이닝 : Java] 수 조작하기 1 (0) | 2025.10.13 |
| [Programmers 코딩 기초 트레이닝 : Java] 마지막 두 원소 (0) | 2025.10.13 |