양말 짝을 맞추는 문제입니다. 저는 젓가락 행진곡 처럼 양 끝에서 가운데로 한짝씩 맞춰나가는 문제라고 이해하고 풀었어요~/
양말 장사를 하는 지훈이는 오랜만에 창고 정리를 하기로 했다. 창고에는 양말짝이 맞지 않은 채 가득 섞여 있었다. 이제 지훈이를 도와 어지럽게 섞여있는 양말의 짝을 맞추어 보자.
- 양말의 종류는 알파벳으로 구분된다.
- 양말의 오른짝은 소문자, 왼짝은 대문자이다.
즉, Jj가 J 양말의 한 쌍이며, aB는 a양말의 오른짝과 B양말의 왼짝이므로 짝이 맞지 않는다.
입력의 첫 번째 줄은 테스트 케이스의 개수 T ( 0 < T <= 30)가 주어지며, 각 테스트 케이스는 한 줄에 하나씩 창고에 있는 양말이 종류와 짝에 상관없이 연속으로 입력된다. 최대 입력되는 양말의 개수는 100개이며, 테스트 케이스에는 알파벳 대소문자만이 입력된다. 하나의 테스트 케이스마다 한 줄씩 출력하며, 주어진 양말의 모든 짝이 맞는다면 ‘YES’를 출력하며, 양말의 짝이 맞지 않는 경우는 ‘NO’를 출력한다.
aaAA ->YES
CAdBb ->NO
Bab ->NO
#include <stdio.h> #include <math.h> int CASE() { int tail=30; char sox[30]; gets(sox); while(sox[tail--]); // 끝에서부터 NULL값을 찾음 if(tail%2==0){return 0;} // 양말 홀수개의 입력이면 리턴 0을 반환함 for(int i=0; i[tail; i++) { if(abs(sox[i]-sox[tail])==32){tail--; continue;} // 짝이 일치할때 회문을 도는 형식 else return 0; // 한번이라도 일치하지 않으면 리턴 0을 반환함 } return 1; } int main(void) { int repeat; scanf("%d",&repeat); fflush(stdin); // 스캔에서의 엔터값 버퍼를 비움 for(int i=1; i[=repeat; i++) { if(CASE())printf("Case #%d:\nYES\n",i); else{printf("Case #%d:\nNo\n",i);} } return 0; }
'4_ 고소한 알고리즘' 카테고리의 다른 글
C- ACM - 휴대폰번호 정렬 (0) | 2010.07.13 |
---|---|
C- ACM - 대지 (0) | 2010.07.07 |
C- ACM - 다운로드 (0) | 2010.07.02 |
C- ACM - 지뢰찾기 (4) | 2010.06.23 |
C- ACM - 수 뒤집기 (0) | 2010.06.12 |