[알고리즘] 2021.05.03 문자열 내 마음대로 정렬하기 ( java, Python ) 🤦‍♀️

👩‍💻 프로그래머스 알고리즘 풀어보기

Level 1 코딩테스트 > 문자열 내 마음대로 정렬하기

사용언어 : java, python

🎲 문제

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

  1. java
import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];
        String[] temp =new String[strings.length];
        
        //1. n번째 글자를 배열 앞에 넣음 
        for(int i=0 ; i<strings.length; i++){
            temp[i] = strings[i].substring(n,n+1) + strings[i];
            
        }
        //2. 정렬 
        Arrays.sort(temp);
        
        for(int i=0 ; i<temp.length; i++){
            //3. 넣었던 n번째 글자를 제외하고 answer에 값 넣음 
          answer[i]= temp[i].substring(1);
        }

        return answer;
    }
}

결과는
.
.
.
.
.
.
.
.
.

정확성 테스트
테스트 1 〉 통과 (1.77ms, 53.4MB)
테스트 2 〉 통과 (3.71ms, 52.2MB)
테스트 3 〉 통과 (1.96ms, 53.1MB)
테스트 4 〉 통과 (1.91ms, 53.1MB)
테스트 5 〉 통과 (1.27ms, 52.2MB)
테스트 6 〉 통과 (1.81ms, 53.3MB)
테스트 7 〉 통과 (4.17ms, 52.5MB)
테스트 8 〉 통과 (1.81ms, 54.2MB)
테스트 9 〉 통과 (1.74ms, 54MB)
테스트 10 〉 통과 (5.32ms, 52.6MB)
테스트 11 〉 통과 (1.58ms, 52.1MB)
테스트 12 〉 통과 (2.41ms, 52.7MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

좀 헷갈렸던 문제,,이렇게 적용해도 되나 싶었는데 통과해서 다행!
나중에 한번 더 풀어보면 좋을 것 같았던 문제였다.

  1. 다른 사람 풀이 😊
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;
    }
}

Collections.sort(배열)..? sort랑 똑같은 건가?

Collections.sort(배열) 과 Arrays.sort(배열)의 차이 !!

  • Array.Sort는 배열을 정렬해주는 것
  • Collections.sort는 클래스의 객체를 정렬해주는 것
  1. 다른 사람 풀이 😊

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        return Arrays.stream(strings).map(string -> new IndexString(string, n)).sorted()
            .map(indexString -> indexString.string).toArray(String[]::new);
    }

    class IndexString implements Comparable<IndexString> {

        String string;
        char index;

        IndexString(String string, int index) {
            this.string = string;
            this.index = string.charAt(index);
        }

        public int compareTo(IndexString indexString) {
            System.out.println(index+"," + indexString.index);
            if (index == indexString.index) {
                return string.compareTo(indexString.string);
            } else {
                return index - indexString.index;
            }
        }
    }
}
  1. python

대망의 파이썬,,,!

def solution(strings, n):
    answer = []
    temp =[]
    for v in strings : 
        temp.append(v[n:n+1] + v )
        
    temp.sort()
    for v in temp: 
        answer.append(v[1:]) 
        
    return answer

결과는!!

정확성 테스트
테스트 1 〉 통과 (0.01ms, 10.2MB)
테스트 2 〉 통과 (0.01ms, 10.1MB)
테스트 3 〉 통과 (0.02ms, 10.2MB)
테스트 4 〉 통과 (0.02ms, 10.2MB)
테스트 5 〉 통과 (0.01ms, 10.2MB)
테스트 6 〉 통과 (0.02ms, 10.2MB)
테스트 7 〉 통과 (0.01ms, 10.2MB)
테스트 8 〉 통과 (0.01ms, 10.1MB)
테스트 9 〉 통과 (0.01ms, 10.3MB)
테스트 10 〉 통과 (0.02ms, 10.2MB)
테스트 11 〉 통과 (0.01ms, 10.2MB)
테스트 12 〉 통과 (0.04ms, 10.2MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0

처음에 이런 에러가 나길래,,내가 대체 뭘 잘못했지,, 하고 고민

attributeerror: 'str' object has no attribute 'sort'

리스트에 append 해서 값을 넣어줘야하는데 자바와 헷갈려서
temp[v].....😭😭😭😭😭😭😭😭😭😭😭

조심조심할 것!

이번주에는 sort, sorted 차이와 파이썬문자열자르기(?)에 대해
정리할 것이다.

파이썬에는 자바처럼(substring) 문자열자르는 함수가 없다고 합니다.
위에서 사용한것 처럼 [n:n+1] < 로 문자열을 자름.

  1. 다른 사람 풀이 😊
 def strange_sort(strings, n):
    return sorted(strings, key=lambda x: x[n])
  1. 다른 사람 풀이 😊
def strange_sort(strings, n):
    def sortkey(x):
        return x[n]
    strings.sort(key=sortkey)
    return strings


print( strange_sort(["sun", "bed", "car"], 1) )

좋은 웹페이지 즐겨찾기