HackerRank_Substring Comparisons

Hi_na·2022년 12월 21일

Project

목록 보기
4/5
post-thumbnail

🔍문제

사전식 순서를 다음과 같이 정렬한다.
A < B < ... < Y < Z < a < b < ... < y < z

사전순으로 가장 작은 부분 문자열과 가장 큰 부분 문자열을 찾도록 함수를 완성한다.

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

  1. Scanner를 이용해 원하는 문자열(s)과 자르는 길이(k)를 설정한다.
  2. for문으로 문자열의 길이까지 반복하고,
  3. substring으로 범위를 잡아 문자열을 자른다.
  4. TreeSet을 이용해 작은 문자열과 큰 문자열이 자동으로 정렬되게 한다.

✏️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

✅TreeSet

binary tree를 기반으로 한 Set 컬렉션
TreeSet에 객체를 저장하면 자동으로 정렬된다.

TreeSet<E> treeSet = new TreeSet<E>();

저장할 객체 타입을 파라미터로 표기하고, 기본 생성자를 호출한다.

✅substring

  • public String substring(int startIndex)
    : 문자열을 끝까지 리턴한다.
  • public String substring(int startIndex, int endIndex)
    : 문자열을 startIndex~endIndex전까지의 문자열을 리턴한다.

0개의 댓글