구름톤 챌린지 2-6: 문자열 나누기

짱올이·2023년 8월 25일

구름톤 챌린지

목록 보기
5/8
post-thumbnail

문제 6. 문자열 나누기

해당 문제는 문자열을 분리하는 모든 경우의 수를 조합으로 탐색한 후, 조건에 따라서 점수를 측정하는 완전 탐색 문제입니다. 신규 제작 문제입니다.


  1. 3개의 부분 문자열로 나누기 substring
    first, second, third로 3부분 문자열로 나눈다.
String first = inputString.substring(0, i);
String second = inputString.substring(i, j);
String third = inputString.substring(j);
  1. 나눈 문자열들 배열에 담기
ArrayList<ArrayList> splitStrs = new ArrayList<>();
tempStrs.add(first);
tempStrs.add(second);
tempStrs.add(third);
  1. 중복제거
    HashSet을 사용해 분리한 문자열에 대한 점수를 중복 없이 담아놓는다.
Set<String> score = new HashSet<>();
score.add(first);
score.add(second);
score.add(third);
  1. 점수 더하기
    Map의 key-value를 가져와 key에 세팅된 점수 value를 더하여서 최종 점수를 구했다.
				for(Map.Entry<String, Integer> elem : map.entrySet()){
					String key = elem.getKey();
					if (key.equals(splitStrs.get(i).get(j))) {
						temp += elem.getValue();
					}
				}

import java.io.*;
import java.util.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		String inputString = br.readLine();
		
		// 1. 3개의 부분 문자열로 나누기 substring
		// 2. 나눈 문자열들 배열에 담기
		ArrayList<ArrayList> splitStrs = new ArrayList<>();
		String splitStr = "";
		// 중복제거
		Set<String> score = new HashSet<>();
		
		for (int i = 1; i < n; i++) {
			for (int j = i + 1; j < n; j++) {
				ArrayList tempStrs = new ArrayList<>();
				String first = inputString.substring(0, i);
				tempStrs.add(first);
				score.add(first);
				
				String second = inputString.substring(i, j);
				tempStrs.add(second);
				score.add(second);

				String third = inputString.substring(j);
				tempStrs.add(third);
				score.add(third);
				
				splitStrs.add(tempStrs);	
			}
		}
		// 점수 세팅
		List<String> tempScore = new ArrayList<>(score);
		Collections.sort(tempScore);
		
		Map<String, Integer> map = new HashMap<>();
		for(int i = 0; i < tempScore.size(); i++) {
			map.put(tempScore.get(i), i+1);	
		}
		
		// 점수 더하기
		int result = 0;
		for(int i=0; i < splitStrs.size(); i++) {
			int temp = 0;
			for(int j = 0; j < 3; j++) {
				for(Map.Entry<String, Integer> elem : map.entrySet()){
					String key = elem.getKey();
					if (key.equals(splitStrs.get(i).get(j))) {
						temp += elem.getValue();
					}
				}
				if (result < temp) {
					result = temp;
				}
			}
		}
		System.out.println(result);
	}
}
profile
모르면 알때까지 공부하라고~~!!

0개의 댓글