JAVA/Algorithm

[프로그래머스/java] 문자열 내 마음대로 정렬하기 (compareTo, charAt)

nang. 2020. 10. 25. 19:24
반응형
SMALL

https://programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

 

  • 문제 풀이 핵심
    • 단어들 앞에 n번째 문자를 붙여준 뒤 정렬시키기
    • 문자 떼고 답변 배열에 넣기

 

  • charAt(n)
    • 문자열의 n번째 문자 추출 (0부터 시작)

 

  • str1.compareTo(str2)
    • 문자열 2개 비교
      • 둘이 같으면 0 반환
      • str1이 더 크면 양수 반환
      • str1이 더 작으면 음수 반환
    • 문자열을 사전적으로 비교함!
      • A < B
      • 두 문자열의 길이가 같은데 글자가 다르면?
        • 처음으로 달라지는 부분의 문자열간의 거리 간격을 음수로 반환
          • 예를들어 A 와 C이면 -2 반환
      • 두 문자열이 앞에서부터 같은데 길이가 다른 글자라면? (뒷부분이 다름)
        • 길이 차이를 반환함
          • 예를들어 AB 와 ABCD 이면 -2 반환

 

 

 

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        
        ArrayList<String> arrayList = new ArrayList<>();
        
        // 단어의 n번째 문자열을 단어의 맨 앞에 붙여준다
        for(int i = 0; i < strings.length; i++) {
            arrayList.add(strings[i].charAt(n) + strings[i]);
        }
        
        // 그러고나서 리스트의 문자열들을 오름차순 정렬시킨다
        Collections.sort(arrayList);
        
        // 리스트를 배열로 변환
        String[] answer = new String[arrayList.size()]; // 단어들이 들어있는 배열의 크기만큼 답변 배열도 같으므로
        
        // 맨 앞에 붙여진 문자를 떼고 답변 배열에 넣어준다
        for(int i = 0; i < arrayList.size(); i++) {
            answer[i] = arrayList.get(i).substring(1); // 0번 빼고 1부터 끝까지
        }
        
        return answer;
    }
}
반응형
LIST