본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 11117번 : Letter Cookies

반응형

https://www.acmicpc.net/problem/11117

 

11117번: Letter Cookies

The first line of the input consists of a single number T, the number of letter cookie boxes your sister has. Each test case starts with a line describing all the letters in this box, in no particular order. Then follows a line with W, the number of words

www.acmicpc.net

 

문제 지문해석이 헷갈렸던 문제였습니다.

 

📕 풀이방법

 

📔 입력 및 초기화

가장 처음에 입력받는 것이 테스트 케이스입니다. 매 테스트 케이스마다 문자열 사전을 입력받습니다. 이후 sister가 배열하길 원하는 문자열의 개수가 주어지고 그 수 만큼 단어가 주어지는 형태입니다. 입력만 잘 해주신다면 이 후 구현은 문제없습니다.

 

 

📔 풀이과정

  1. 매 테스트케이스마다 alpha배열을 0으로 초기화해줍니다.

 

  2. 이 후 입력받은 단어사전을 한 문자씩 확인하며 알파벳이 몇 개씩 나왔는지 alpha배열에 저장해줍니다.

 

  3. 그 후 배열하길 원하는 문자열들의 문자들을 하나씩 확인하며 해당하는 알파벳이 alpha배열에 존재하는지 확인합니다. 없다면 flag를 세워줍니다.

 

 

📔 정답출력

 1. 가지고 있는 문자가 아니거나 더 이상 배열할 수 없을 때(f == 0) NO

 2. 모두 배열을 완료 했을 경우에는 YES를 출력해줍니다.


 

 

📕 Code

#include <bits/stdc++.h>
using namespace std;
int cookieNum, testCase, alpha[26], alphaCopy[26];
string cookieWord, let;
int main(){
    cin >> testCase;

    while(testCase--){
        memset(alpha,0,sizeof(alpha));
        cin >> cookieWord;

        for(int i = 0; i < cookieWord.size(); i++) alpha[cookieWord[i]-'A']++;
        cin >> cookieNum;

        for(int i = 0; i < cookieNum; i++){
            for(int i = 0; i < 26; i++) alphaCopy[i] = alpha[i];
            cin >> let;
            
            int f = 0;

            for(int j = 0; j < let.size(); j++){
                if(!alphaCopy[let[j]-'A']) f = 1;
                else alphaCopy[let[j]-'A']--;
            }

            if(!f) cout << "YES\n";
            else cout << "NO\n";
        }
    }
}