algorithm/문제 풀이

99클럽 코테 스터디 6일차 TIL - 프로그래머스 문자열 내 마음대로 정렬하기

ssoheeh 2024. 4. 6. 22:00

 

코드

import java.util.*;
import java.io.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        PriorityQueue<Character> pq = new PriorityQueue<>();
        PriorityQueue<String> stringspq = new PriorityQueue<>();
        Vector<Character> v = new Vector<>();
        Vector<String> stringsv = new Vector<>();
        for(int i=0;i<strings.length;i++){
            pq.add(strings[i].charAt(n));
            stringspq.add(strings[i]);
        }
        //System.out.println(stringspq.peek());
        for(int i=0;i<strings.length;i++){
            v.add(pq.poll());
            stringsv.add(stringspq.poll());
        }
        String s = new String();
        for(int i=0;i<n+1;i++){
            s+= "1";
        }
        //System.out.println(s);
        answer = new String[strings.length];
        //System.out.println(v.get(0));
        for(int i=0;i<strings.length;i++){
            for(int j=0;j<strings.length;j++){
                if(v.get(i)==stringsv.get(j).charAt(n)){
                    answer[i] = stringsv.get(j);
                    stringsv.set(j, s);
                    break;
                    //stringsv.remove(stringsv.get(j));
                    //strings[j] = "123";
                }
            }
        }
        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;
    }
}

훨씬 정리 잘되고 깔끔한 메모리 사용

문자열 앞에 인덱스에 해당되는 알파벳을 추가해서 정렬하는 방식

 

 

 

정렬 method

//배열 정렬
Arrays.sort(arr);
Arrays.sort(arr, Collections.reverseOrder()); //내림차순

//ArrayList 정렬
Collections.sort(list);

//정렬 후 내림차순으로
Collections.sort(list);
Collections.reverse(list);

 

 

 

오늘의 회고

  • 문제를 푸는 것에 그치는 것이 아니고 풀고도 내 풀이의 부족한 점을 잘 파악해서 최적화할 수 있는 방법을 찾자...!
  • 내일(4/7) 학습 예정 : 스프링부트 온라인 강의 끝내기