티스토리 뷰

프로그래머스 문제, '문자열 내 마음대로 정렬하기'를 풀면서 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)
  1. 문자열 내 마음
 
반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
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
글 보관함
반응형