• Home
  • About
    • Develop2r photo

      Develop2r

      안녕하세요 IT 개발자 임기남입니다. 한걸음 한걸음 나아가는 개발자를 꿈꾸고 있습니다.

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Algorithm

2020_상반기_카카오_3번

17 Jun 2020

Reading time ~1 minute

문제 풀이

탐욕(Greed) 문자열을 전부 포함하는 최장 구간 구하기

Code Snippets

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class first2020_3 {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
//      String gems[] = {"DIA","RUBY","RUBY","DIA","DIA","EMERALD","SAPPHIRE","DIA"};
//      String [] gems = {"AA","AB","AC","AA","AC"};
//      String [] gems = {"XYZ","XYZ","XYZ"};
      String [] gems = {"ZZZ","YYY","NNNN","YYY","BBB"};

      int N = gems.length;
      
      TreeSet<Integer> set = new TreeSet<>();
      
      HashMap<String, Integer> map = new HashMap<>();
      
      int result[] = {0,N-1};
      int len = 100001;
      
      for (int i = N-1; i >= 0; i--) {
         if(map.containsKey(gems[i])) {
            set.remove(map.get(gems[i]));
            map.replace(gems[i], i);
            set.add(i);
            if(len >= (set.last() - i) ) {               
               result[0]=i;
               result[1]=set.last();
               len = set.last() - i;
            }
         }
         else {
            set.add(i);
            map.put(gems[i], i);
            result[0]=i;
            len = result[1] - result[0];
         }
      }
      System.out.println((result[0]+1)+" "+(set.last()+1));
      
   }

}

같은 길이면 앞쪽 구간을 선택해야 했기 때문에 배열 뒤에서 부터 체크



algorithmkakao Share Tweet +1