문자열 s와 정수 k가 주어지면 길이가 k이고 사전순으로 가장 작은 부분 문자열과
가장 큰 부분 문자열을 찾도록 함수를 완성해야 한다.
사전 순서: A < B < ... < Y < Z < a < b < ... < y < z
string s: 문자열
int k: 찾을 부분 문자열의 길이
String s = "welcometojava"에 사전순으로 정렬된 길이 k=3의 하위 문자열이 존재.
["ava" "com" "elc" "eto", "jav", "lco", "met", "oja", "ome", "toj","wel"]
문자열 길이를 구하고 위해서는 java.lang.String 클래스의 length() 메소드를 사용.
문자열의 길이 (16bit Unicode Character 갯수)를 리턴해준다.
public class StringLength {
public static void main(String[] args) {
String str1 = "ABC";
String str2 = "A B C";
String str3 = "안녕하세요";
System.out.println(str1.length()); // 3을 리턴
System.out.println(str2.length()); // 5를 리턴
System.out.println(str3.length()); // 5를 리턴
}
}
compareTo()
: 문자열의 사전순 값을 비교하여 그에 해당되는 int값을 리턴한다.
예를 들어 A>B 일때, A=B이면 0 A>B이면 1 A<B이면 -1을 리턴한다.
public void test(){
String str1 = "AA";
String str2 = "AA":
String str3 = "BB";
System.out.println(str1.compareto(str2)); // 결과 0
System.out.println(str2. compareTo(str3)); // 결과 -1
System.out.println(str3.compareTo(str2)): // 결과 1
}
substring(a,b)
: a는 시작값, b는 종료값
a번째부터 b번째 전까지 잘라내서 표시
import java.util.Scanner;
public class Solution {
public static String getSmallestAndLargest(String s, int k) {
String smallest = "";
String largest = "";
// Complete the function
// 'smallest' must be the lexicographically smallest substring of length 'k'
// 'largest' must be the lexicographically largest substring of length 'k'
String lex = s.substring(0, k);
// 0부터 k번째 전까지 s를 잘라 lex 라는 변수명으로 String 객체를 하나 생성한다.
smallest = largest = lex;
// 그렇게 자른 lex는 wel이다.
for (int i=1; i<= (s.length() - k); i++){
// 위에서 비교군을 위해 wel을 하나 잘랐으므로 다음 1번째 부터(e부터) k만큼 substring한다.
//s.length()-k를 해주는 이유는 string의 범위를 넘어가서 substring할 수 없기 때문이다.
lex = s.substring(i,(i+k));
if (lex.compareTo(smallest)<0){
// lex와 smallest를 비교해 lex가 smallest보다 작으면(사전순서상 빠르면)
// smallest에 for문에서 돌려준 lex가 담긴다.
smallest = lex;
}
if (lex.compareTo(largest)>0){
// 만약 위의 조건문이 false가 되고 여기에서 lex가
// largest보다 사전순으로 느리면(크면) largest에 for문에서 돌려준 lex가 담긴다.
largest = lex;
}
}
return smallest + "\n" + largest;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
int k = scan.nextInt();
scan.close();
System.out.println(getSmallestAndLargest(s, k));
}
}