사전순으로 가장 작은 부분 문자열과 가장 큰 부분 문자열을 찾도록 함수를 완성한다.
String s : 문자열
int k : 찾을 하위 문자열의 길이
✔️Sample Input
welcometojava
3
✔️Sample Output
ava
wel
예를 들어, s = "welcometojava"를 입력하고, k = 3으로 문자열의 길이를 나누게 되면 아래와 같이 나오게 된다.
["wel", "elc", "lco", "com", "ome", "met", "eto", "toj", "oja", "jav", "ava"]
Algorithm
✏️Coding
package hackerRank1;
import java.util.Scanner;
import java.util.TreeSet;
public class HackerRankT {
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
TreeSet<String> treeSet = new TreeSet<String>();
// s.length()-k를 빼주는 이유는 string의 범위를 넘어가서
// "StringIndexOutOfBoundsException" 에러가 뜬다.
// 주로, subString함수 사용 시, string의 길이를 벗어나서 발생한다.
for(int i = 0; i <= s.length()-k; i++) {
treeSet.add(s.substring(i,i+k));
} // for
// 제일 낮은 객체를 리턴
smallest = treeSet.first();
// 제일 높은 객체를 리턴
largest = treeSet.last();
return smallest + "\n" + largest;
} // getSmallestAndLargest
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("문자열입력 > ");
String s = scanner.nextLine();
System.out.println("숫자입력 >");
int k = scanner.nextInt();
scanner.close();
System.out.println(getSmallestAndLargest(s,k));
} // main
} // end class
binary tree를 기반으로 한 Set 컬렉션
TreeSet에 객체를 저장하면 자동으로 정렬된다.
TreeSet<E> treeSet = new TreeSet<E>();
저장할 객체 타입을 파라미터로 표기하고, 기본 생성자를 호출한다.