> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Substring Comparisons

jini:) 2021. 8. 31. 23:28
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Strings > Java Substring Comparisons
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

다음 용어를 정의합니다.

  • 알파벳 또는 사전 순서라고도 하는 사전 순서는 다음과 같이 문자를 정렬합니다. A < B < ... < Y < Z < a < b < ... < y < z
    예를 들어, ball < cat, dog < dorm, Happy < happy, Zoo < ball.
  • 문자열의 substring은 문자열에서 연속적인 문자 블록입니다. 예를 들어, abc의 substring은 a, b, c, ab, bc 및 abc입니다.

문자열 s와 정수 k가 주어지면 사전순으로 길이가 k인 가장 작은 부분 문자열과 가장 큰 부분 문자열을 찾도록 함수를 완성합니다.

 

Function Description

아래 에디터에서 getSmallestAndLargest 함수를 완성하세요.

getSmallestAndLargest에는 다음 매개변수가 있습니다.

  • string s : 문자열
  • int k : 찾을 부분 문자열의 길이

 

Returns

  • string : 여기서 ' + "\n" + ' 는 두개의 substring

 

 

Input Format

  • 첫 번째 줄에는 s를 나타내는 문자열이 있습니다.
  • 두 번째 줄에는 k를 나타내는 정수가 있습니다.

 

Constraints

  • 1 ≤ |s| ≤ 1000
  • s는 영어 알파벳 문자로만 구성됩니다(즉, [a-zA-Z]).

 

Sample Input

welcometojava
3

 

Sample Output

ava
wel

 

 

Explanation

String s = "welcometojava"에는 사전순으로 정렬된 다음과 같은 길이 k = 3의 하위 문자열이 있습니다.

["ava", "com", "elc", "eto", "jav", "lco", "met", "oja", "ome", "toj", "wel"]

그런 다음 첫 번째(사전적으로 가장 작은) 하위 문자열과 마지막(사전적으로 가장 큰) 하위 문자열을 줄 바꿈으로 구분된 두 값(즉, ava\nwel)으로 반환합니다.

그런 다음 에디터의 스텁 코드는 ava를 첫 번째 출력 줄로 출력하고 wel을 두 번째 줄로 출력합니다.

 

Code :

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 tmp = s.substring(0, k);
        smallest = tmp;
        largest = tmp;
        
        for(int i = 1; i <= (s.length() - k); i++){
            tmp = s.substring(i, (i + k));

            if(tmp.compareTo(smallest) < 0){
                smallest = tmp;
            }
            if(tmp.compareTo(largest) > 0){
                largest = tmp;
            }            
        }
        
        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));
    }
}

 

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형