티스토리 뷰
[Java] ArrayList타입 Array(배열)타입 차이 알아보기 _ 프로그래머스 '문자열 내 마음대로 정렬하기'
py0922 2025. 3. 5. 22:33프로그래머스 문제, '문자열 내 마음대로 정렬하기'를 풀면서 ArrayList 타입과 Array 타입의 차이를 명확히 하고 지나갈 수 있었다.
일단 프로그래머스 '문자열 내 마음대로 정렬하기'에서 나는 간단하게 풀기위해 아래와 같이 풀었다.
strings가 String[] 타입, 즉 Array 타입이기 때문에 Arrays.sort()를 이용해 주었고, 추가적으로 람다식을 사용하여 코드를 간단하게 하였다.
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, (o1, o2) -> o1.charAt(n) == o2.charAt(n)
? o1.compareTo(o2)
: Character.compare(o1.charAt(n), o2.charAt(n)));
return strings;
}
}
그렇게 풀고 지나가던 중, 가장 좋아요를 많이 받은 코드를 보았는데, 그 분의 코드가 기발해서 그 분의 코드를 한 번 보고 다시 풀어보았다. 풀어보는 과정에서 당연히 그 분이 어떻게 풀었는지 핵심 요소만 생각날 뿐 그 외의 요소는 생각이 나지 않았기 때문에, 아래와 같이 풀고 다시 한 번 그 분의 코드를 보았다.
코드에 차이가 있었는데, 그 분은 ArrayList 타입을 사용하였고, 나는 배열 타입을 사용했다는 것이었다.
그러고 보니 내가 ArrayList와 배열의 차이를 정확히 알고 있던가 생각하였고,
알고 있는 차이라곤 배열은 크기를 반드시 지정해줘야하고, 지정 후 수정할 수 없지만, ArrayList는 크기가 유동적이라는 점이었다. 그래서 차이를 정리해보려고 이 글을 쓴다.
- 내가 쓴 코드
import java.util.Arrays;
class Solution {
public String[] solution(String[] strings, int n) {
String[] s = new String[strings.length];
for(int i=0; i<strings.length; i++){
s[i] = strings[i].charAt(n) + strings[i];
}
Arrays.sort(s);
String[] answer = new String[strings.length];
for(int i=0; i<strings.length; i++){
answer[i] = s[i].substring(1);
}
return answer;
}
}
- 그 분이 쓴 코드
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
String[] answer = {};
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < strings.length; i++) {
arr.add("" + strings[i].charAt(n) + strings[i]);
}
Collections.sort(arr);
answer = new String[arr.size()];
for (int i = 0; i < arr.size(); i++) {
answer[i] = arr.get(i).substring(1, arr.get(i).length());
}
return answer;
}
}
- 차이점
나는 많은 차이점 가운데, 메서드 지원 여부와 정렬 방법이 코딩 테스트에서 중요하다고 생각되었다.
코딩 테스트에서는 이런 작은 점도 헷갈릴 수 있기 때문에, 헤매지 않으려면 잘 알고 가야하는 것 같다.
| 구분 | Array(배열) | ArrayList |
| 크기 설정 | 한 번 설정하면 수정 불가능 | 유동적 |
| 초기 크기 설정 | 초기에 크기를 반드시 정해줘야 함. | 초기에 크기를 정해주지 않아도 됨. |
| 속도 | 크기가 고정되어 빠름 | 크기 조절 속도가 배열에 비해 느림 |
| 구현 방법 | String[] s = new String[5]; | ArrayList<String> s = new String<>(); 참고로 ArrayList는 기본형을 사용할 수 없다. 즉, int, double이런걸 못 씀. Wrapper class인 Integer, Double 등을 사용해야 함. |
| 메서드 지원 | 메서드 지원X, 수동 구현O | 메서드 지원해 줌. ex. contains(), get(), add(), remove(), size() .etc |
| 정렬 방법 | Arrays.sort(s); | Collections.sort(s) |
- 문자열 내 마음
'JAVA & Spring' 카테고리의 다른 글
| [Spring boot] N+1 문제 해결방법 (0) | 2025.05.26 |
|---|---|
| [Spring boot] DB 내역 및 AWS S3의 파일(이미지) 자동 삭제하기 (0) | 2024.08.05 |
| [Spring boot] AWS S3 연동 (0) | 2024.08.04 |
| [Spring boot] Kakao api 주소 오류 401 Unauthorized: "{"errorType":"AccessDeniedError","message":"ip mismatched! callerIp=000.000.000.00 check out registered ips."}" (0) | 2024.08.03 |
| [Spring] 개발1 (0) | 2024.07.22 |
- Total
- Today
- Yesterday
- 다인승탑승
- Turtle Graphic
- 문제풀이
- baekjoon
- 터틀그래픽예제
- springboot
- JAVA오류해결
- gradleload오류
- 터틀그래픽
- 터틀그래픽 명령어
- python공부
- UnsupportedClassVersionError
- yolov8
- 사람검출
- 오븐시계
- tweepy
- randint
- randrange
- 10828번
- 에러발생
- konlpy
- database연결
- 백준
- streamlistener
- Kkma
- SPRING오류해결
- YOLO
- 파이썬
- 다인승
- 사람수세기
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |