Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AOP
- JDBC
- Servlet
- transaction
- QueryDSL
- 자바
- Spring Boot
- 스프링 핵심 원리
- spring
- 백준
- Exception
- http
- springdatajpa
- 알고리즘
- Greedy
- jpa
- 스프링
- db
- kotlin
- JPQL
- 그리디
- pointcut
- 인프런
- 김영한
- 스프링 핵심 기능
- SpringBoot
- Thymeleaf
- Proxy
- Android
- java
Archives
- Today
- Total
개발자되기 프로젝트
[프로그래머스] 문자열 내 마음대로 정렬하기 본문
1. 문제
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
입출력 예
strings | n | return |
["sun", "bed", "car"] | 1 | ["car", "bed", "sun"] |
["abce", "abcd", "cdx"] | 2 | ["abcd", "abce", "cdx"] |
입출력 예 설명
입출력 예 1
"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다.
이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다.
입출력 예 2
"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다.
따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는 사전순으로 정렬하면 "abcd"가 우선하므로,
답은 ["abcd", "abce", "cdx"] 입니다.
2. 문제 정리
특정 위치의 알파벳을 가지고 정렬하는 것.
두 알파벳이 같은 경우 문자 전체 기준으로 알파벳 숫으로 정렬 -> s1.compareTo(s2)
PriorityQueue에 Comparator 구현해서 넣어놓고 쭉 뽑아서 return하면..?
3. 코드
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
class Solution {
public String[] solution(String[] strings, int n) {
PriorityQueue<String> queue = new PriorityQueue<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.charAt(n) == o2.charAt(n)){
return o1.compareTo(o2);
}else {
return (int) o1.charAt(n) - (int) o2.charAt(n);
}
}
});
queue.addAll(Arrays.asList(strings));
int cnt=0;
String[] answer = new String[queue.size()];
while (!queue.isEmpty()){
answer[cnt++] = queue.remove();
}
return answer;
}
}
4. 개선 : Arrays.sort()
- Arrarys.sort() 메서드를 바로 이용하자.
- PriorityQueue를 사용할 이유가 없다.
- Arrays.sort()바로 쓸 수 있는지 몰랐음..ㅜ
Arrays.sort(string, Comparator)
import java.util.*;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.charAt(n) == o2.charAt(n)){
return o1.compareTo(o2);
}else {
return (int) o1.charAt(n) - (int) o2.charAt(n);
}
}
});
return strings;
}
}
5.GitHub : 211212 SortString
'코테준비' 카테고리의 다른 글
[프로그래머스] 문자열 내림차순으로 배치 (0) | 2021.12.12 |
---|---|
[프로그래머스] 문자열 내 p 와 y의 개수 (0) | 2021.12.12 |
[프로그래머스] 두 정수 사이의 합 (0) | 2021.12.12 |
[프로그래머스] 나누어 떨어지는 숫자 배열 (0) | 2021.12.12 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2021.12.12 |
Comments