양말+짝+맞추기

양말 장사를 하는 지훈이는 오랜만에 창고 정리를 하기로 했다. 창고에는 양말 짝이 맞지 않은 채 가득 섞여 있었다. 이제 지훈이를 도와 어지럽게 섞여있는 양말의 짝을 맞추어 보자.


 * 양말의 종류는 알파벳으로 구분된다.
 * 양말의 오른짝은 소문자, 왼짝은 대문자이다.

즉, Jj가 J 양말의 한 쌍이며, aB는 a 양말의 오른짝과 B 양말의 왼짝이므로 짝이 맞지 않는다.

Input
입력의 첫 번째 줄은 테스트 케이스의 개수 T (0 < T <= 30)가 주어지며, 각 테스트 케이스는 한 줄에 하나씩 창고에 있는 양말이 종류와 짝에 상관없이 연속으로 입력된다. 최대 입력되는 양말의 개수는 100개 이며, 테스트 케이스에는 알파벳 대소문자만 입력된다.

Output
하나의 테스트 케이스마다 두 줄씩 출력된다. 각 테스트 케이스의 결과 첫 줄은 "Case #X:" 와 같이 "Case" 뒤에 한 칸 띄우고 " #"과 테스트 케이스 번호 X를 출력한 후 ":" 을 찍는다. 두 번째 줄은 입력 값에 대한 결과값을 출력한다. 주어진 양말의 모든 짝이 맞는다면 'YES'를 출력하며, 양말의 짝이 맞지 않는 경우는 'NO'를 출력한다.

Sample Input
3 aaAA CAdBb Bab

Sample Output
Case #1: YES Case #2: NO Case #3: NO

Source Code code format="java5" public class Socks { private static final int ALPHABET_SIZE = 26;

public static void main(String[] args) { process("aaAA"); process("CAdBb"); process("Bab"); }

public static boolean isMatch(String cases) { int[] rightSock = new int[ALPHABET_SIZE]; int[] leftSock = new int[ALPHABET_SIZE];

for(int i = 0; i < cases.length; i++) { char c = cases.charAt(i);

if(Character.isLowerCase(c)) { rightSock[c - 'a']++; }           else { leftSock[c - 'A']++; }       }

for(int i = 0; i < ALPHABET_SIZE; i++) { if(rightSock[i] != leftSock[i]) { return false; }       }        return true; }

public static void process(String socks) { // 주어진 양말의 모든 짝이 맞는다면 'YES'를 출력하며, // 양말의 짝이 맞지 않는 경우는 'NO'를 출력한다. if(isMatch(socks)) { System.out.println("YES"); }       else { System.out.println("NO"); }   } } code

Comment