투케이2K

236. (java/자바) 알고리즘 : 스킬트리 - replaceAll 정규식 , 특정 문자 패턴 출력 본문

Java

236. (java/자바) 알고리즘 : 스킬트리 - replaceAll 정규식 , 특정 문자 패턴 출력

투케이2K 2021. 8. 24. 07:47
반응형

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex6;

import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity13 {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
      System.out.println("[Program Start]");
      System.out.println("");
      
      /**
       * [스킬트리]
       * 1. 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야합니다
       * 2. 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다
       * 3. 입출력 예시 : 
       *    - skill = "CBD" / skill_trees = ["BACDE", "CBADF", "AECB", "BDA"] / return = 2
       * 4. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/49993
       * */
      
      // 초기 변수 선언 실시
      String data = "CBD";
      String arr[] = {"BACDE", "CBADF", "AECB", "BDA"};
      
      // 결과 출력 메소드 호출 실시
      System.out.println("결과 : " + solution(data, arr));

   }// 메인 종료
   
   public static int solution(String skill, String[] skill_trees) {
      // 결과 반환 변수 선언
      int result = 0;
      
      // 인풋으로 들어온 데이터 확인 실시
      System.out.println("skill : " + skill);
      System.out.println("skill_trees : " + Arrays.toString(skill_trees));
      System.out.println("");
      
      // 로직 처리 실시
      /**
       * [세부 설명]
       * 1. 필수 스킬트리로 찍을 수 있는 경우의 수 출력 실시
       * 2. 정규식 패턴을 사용해서 사용자들이 찍은 스킬트리에서 특정 문자만 출력하도록 실시
       * 3. 스킬트리 배열에서 필수 스킬트리 경우의 수를 만족하는 것을 확인 실시
       * */
      
      // skill - 필수로 찍어야할 스킬 트리 경우의 수 확인 실시
      String case_data = "";
      ArrayList case_list = new ArrayList<>(); // 경우의 수를 담기 위한 배열
      
      for (int i=0; i<skill.length(); i++) {
         case_data += skill.charAt(i); // C / CB / CBD 순으로 경우의 수를 구합니다
         case_list.add(case_data);
      }
      System.out.println("경우의 수 : " + case_list.toString());
      System.out.println("");
      
      // 정규화 방법을 사용해서 특정 문자만 허용 실시
      for(int j=0; j<skill_trees.length; j++) {         
         String regex = skill_trees[j].replaceAll("[^CBD]", ""); // 특정 문자열만 출력
         //String regex = skill_trees[j].replaceAll("[CBD]", ""); // 특정 문자열만 제거
         System.out.println("원 본 : " + skill_trees[j]);
         System.out.println("정규식 수행 : " + regex);
         System.out.println("");
         
         for (int k=case_list.size()-1; k>=0; k--) { // 경우의 수 배열을 돌면서 일치하는 패턴이 있는지 확인
            System.out.println();
            if(case_list.get(k).toString().equals(regex)) { // 특정 패턴을 포함하지 않는 경우               
               result ++;
               break;
            }
         }         
      }
      
      // 결과 반환 실시
      return result;      
   }

}// 클래스 종료

[결과 출력]

 


[요약 설명]

/**

* [스킬트리]

* 1. 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야합니다

* 2. 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다

* 3. 입출력 예시 :

*    - skill = "CBD" / skill_trees = ["BACDE", "CBADF", "AECB", "BDA"] / return = 2

* 4. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/49993

* */


 

반응형
Comments