백준 1213

hong030·2023년 3월 4일
0
  • 실버 3단계 문제

풀이)

순서가 있는 사전 형식인 Treemap을 통해 입력받은 알파벳들을 정리한다.

  1. 알파벳 개수가 짝수인 경우
  • 절반은 first, 절반은 last 문자열에 붙인다.
  1. 알파벳 개수가 홀수인 경우
  • 절반은 first, 절반은 last 문자열에 붙인다.
  • 남은 알파벳 한 개는 middle 문자열에 붙이는데, 만약 middle에 문자열이 존재한다면 펠린드롬이 성립되지 않아 I'm sorry를 출력하고 끝낸다.

주의할 점)

내 코드에선 treemap을 넣어서 풀었지만, 시간이 짧게 걸린 다른 사람들 코드를 보면 26칸짜리 배열을 만들어서 풀었다. 알파벳 관련 문제가 나오면 배열 26칸짜리를 만드는 쪽으로 생각해보자.

내 코드)

import java.io.*;
import java.util.*;

public class Bacjoon1476 {
	public static void main(String[]args) throws IOException{

		//입력받기.
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String input = bf.readLine();
		char arr[] = input.toCharArray();
		StringBuilder first = new StringBuilder();
		StringBuilder middle = new StringBuilder();
		StringBuilder last = new StringBuilder();
		
		//사전 만들어서 알파벳 개수별로 정리하기.
		TreeMap<Character, Integer> table = new TreeMap<>();
		for(int i=0;i<arr.length;i++) {
			if(table.containsKey(arr[i])) {
				int num = table.get(arr[i]);
				table.put(arr[i], num+1);
			}else {
				table.put(arr[i], 1);
			}
		}
		
		//문장 만들기
		//1. 사전 알파벳 순으로 각 단어 개수의 반은 first 뒤에, 반은 last 앞에 붙인다.
		//2. 만약 단어 개수가 홀수라면 first 뒤에 붙인다.
		//3. 만약 이전 단어 개수가 홀수인데 그다음 단어 개수도 홀수라면 break하고 팰린드롬을 만들 수 없다고 출력한다.
		//4. 위의 조건을 만족하면 first와 last 단어를 붙여서 출력한다.
		
		Iterator<Character> keys = table.keySet().iterator();
		while(keys.hasNext()){
		    char key = keys.next();
		    if((table.get(key) %2 == 0)) {
		    	for(int i=0;i<table.get(key)/2;i++) {
		    		first.append(key);
		    		last.insert(0, key);
		    	}
		    }
		    else if ((table.get(key)%2!=0) && table.get(key)>1) {
		    	if(middle.length() != 0) {
		    		System.out.println("I'm Sorry Hansoo");
		    		return;
		    	}else {
			    	for(int i=0;i<table.get(key)/2;i++) {
			    		first.append(key);
			    		last.insert(0, key);
			    	}
		    		middle.append(key);
		    	}
		    }
		    else {
		    	if(middle.length() != 0) {
		    		System.out.println("I'm Sorry Hansoo");
		    		return;
		    	}else {
		    		middle.append(key);
		    	}
		    }
		}
		
		first.append(middle); first.append(last);
		System.out.println(first);

		
		bf.close();
	}
}

profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글