개발에 AtoZ까지

[JAVA][D3] 10804. 문자열의 거울상 본문

코딩테스트 준비/SWEA

[JAVA][D3] 10804. 문자열의 거울상

AtoZ 개발자 2021. 3. 4. 00:34
반응형

문제 

알파벳 소문자 만으로 이루어진 문자열이 주어진다.

이 문자열에서 같은 두 문자들을 짝짓고 남는 문자가 무엇인지 구하는 프로그램을 작성하라.

같은 문자를 여러 번 짝지어서는 안 된다.

 

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 알파벳 소문자 만으로 이루어진 문자열이 주어진다.

이 문자열의 길이는 1이상 100이하이다.

 

[출력]

각 테스트 케이스 마다 예제와 같은 형식으로 남는 문자를 사전 순서대로 출력한다.

만약 어떤 문자도 남지 않는다면 “Good”을 출력하도록 한다.

예시

 

풀이


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class Solution {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		
		for(int i=1;i<=T;i++) {
			String inputStr = br.readLine();
			System.out.println("#"+i+" "+ aloneStr(inputStr));
		}
	}
	
	public static String aloneStr(String inputStr) {
		StringBuilder sb = new StringBuilder();
        //문자를 저장할때 정렬을 시킬수있는 treemap을 사용
		Map<Character, Integer> map = new TreeMap<Character, Integer>();
		for(Character c : inputStr.toCharArray()) {
			map.put(c, map.getOrDefault(c, 0)+1);
		}
		for(Character c: map.keySet()) {
        //짝이 있는 문자열인지 확인
			if(map.get(c)%2 == 1) {
				sb.append(c);
			}
		}
		if(sb.toString().isEmpty()) return "Good";
		return sb.toString();
	}
}
반응형
Comments