목차
#1 접미사 배열
문제 설명
어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- my_string은 알파벳 소문자로만 이루어져 있습니다.
- 1 ≤ my_string의 길이 ≤ 100
입출력 예
my_string | result |
"banana" | ["a", "ana", "anana", "banana", "na", "nana"] |
"programmers" | ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"] |
입출력 예 설명
#2 코드 및 알고리즘
import java.util.List;
import java.util.stream.IntStream;
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public String[] solution(String my_string) {
List<String> list = new ArrayList<>();
IntStream.range(0, my_string.length()).forEach(value -> {
list.add(my_string.substring(value,my_string.length()));
});
String[] arr = list.stream().toArray(String[]::new);
Arrays.sort(arr);
return arr;
}
}
풀이:
- 접미사란
파생어를 만드는 형태소의 하나. 어떤 단어의 끝에 붙어 새로운 단어가 되게 하는 말. `가위질'의 `-질' 따위. 끝가지. 뒷가지. 발가지. 접미어. 라고하는데 솔직히 어려운 말이다.
쉽게 이야기 하자면 단어 따위를 뒤집었을 때, 가장 처음에 오는 문자라고 보며, 위의 코드 상에서는 문자열을 뒤집었을 때, 가장 처음에 오는 문자열이라고 보면된다.
- 이해가 안된다면 밑에 예제 코드를 보자.
public class Main {
public static void main(String[] args) {
String my_string = "banana"; // banana의 접미사를 구해보자.
List<String> list = new ArrayList<>(); // 스택 방식을 사용한다.
IntStream.range(0, my_string.length()).forEach(value -> {
list.add(my_string.substring(value,my_string.length()));
System.out.println(list);
});
/*
* 위의 IntStream을 이용하여 반복문을 구현하는데 알고리즘은 간단하다.
* 사실 접미사란 banana 같이 이러한 단어만 되는 것이 아니라
* anana, na, nana 이러한 것도 접미사가 될 수있다.
* 따라서 banana에서 value를 1씩 증가시키면서 banana 문자열에서
* 맨 앞위 원소를 하나 씩 짤라가면서 접미사를 구한다.*/
String[] arr = list.stream().toArray(String[]::new);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
--------------------------------------------------------------
[banana] // 인덱스 0부터 저장
[banana, anana] // 인덱스 1부터 저장
[banana, anana, nana] // 인덱스 2부터 저장
[banana, anana, nana, ana] // 인덱스 3부터 저장
[banana, anana, nana, ana, na] // 인덱스 4부터 저장
[banana, anana, nana, ana, na, a]// 인덱스 5부터 저장
[a, ana, anana, banana, na, nana]// 사전순으로 정렬한 결과
public class Main {
public static void main(String[] args) {
String my_string = "programmers";
List<String> list = new ArrayList<>();
IntStream.range(0, my_string.length()).forEach(value -> {
list.add(my_string.substring(value,my_string.length()));
System.out.println(list);
});
String[] arr = list.stream().toArray(String[]::new);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
---------------------------------------------------------------
[programmers]
[programmers, rogrammers]
[programmers, rogrammers, ogrammers]
[programmers, rogrammers, ogrammers, grammers]
[programmers, rogrammers, ogrammers, grammers, rammers]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers, mmers]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers, mmers, mers]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers, mmers, mers, ers]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers, mmers, mers, ers, rs]
[programmers, rogrammers, ogrammers, grammers, rammers, ammers, mmers, mers, ers, rs, s]
[ammers, ers, grammers, mers, mmers, ogrammers, programmers, rammers, rogrammers, rs, s]
규칙이 보인다.
'JAVA > 프로그래머스 코딩 기초 트레이닝' 카테고리의 다른 글
[프로그래머스, LV.0] 접두사인지 확인하기 (0) | 2023.06.28 |
---|---|
[프로그래머스, LV.0] 접미사인지 확인하기 (0) | 2023.06.26 |
[프로그래머스, LV.0] 문자열 여러 번 뒤집기 (0) | 2023.06.22 |
[프로그래머스, LV.0] 9로 나눈 나머지 (0) | 2023.06.22 |
[프로그래머스, LV.0] 부분 문자열 이어 붙여 문자열 만들기 (0) | 2023.05.29 |