[알고리즘] 2021.05.03 문자열 내 마음대로 정렬하기 ( java, Python ) 🤦♀️
👩💻 프로그래머스 알고리즘 풀어보기
Level 1 코딩테스트 > 문자열 내 마음대로 정렬하기
사용언어 : java, python
🎲 문제
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
- 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
좀 헷갈렸던 문제,,이렇게 적용해도 되나 싶었는데 통과해서 다행!
나중에 한번 더 풀어보면 좋을 것 같았던 문제였다.
- 다른 사람 풀이 😊
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는 클래스의 객체를 정렬해주는 것
- 다른 사람 풀이 😊
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;
}
}
}
}
- 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] < 로 문자열을 자름.
- 다른 사람 풀이 😊
def strange_sort(strings, n):
return sorted(strings, key=lambda x: x[n])
- 다른 사람 풀이 😊
def strange_sort(strings, n):
def sortkey(x):
return x[n]
strings.sort(key=sortkey)
return strings
print( strange_sort(["sun", "bed", "car"], 1) )
Author And Source
이 문제에 관하여([알고리즘] 2021.05.03 문자열 내 마음대로 정렬하기 ( java, Python ) 🤦♀️), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hhyebin1103/알고리즘-2021.05.03-문자열-내-마음대로-정렬하기-java-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)