공부혜옹

백준 13915 현수의 열기구 교실 본문

공부합시다/Algorithm

백준 13915 현수의 열기구 교실

Blair06 2021. 11. 1. 00:17

쉬운 문제였는데 테스트케이스를 몇개 줄건지 말을 안해줘서 while(cin >> n) 부분을 빼먹었더니 틀렸던 문제다..화가 난다

 

풀이 방법은 각자의 숙련도가 들어올때마다 비트마스킹해서 그 값과 기존의 숙련도 비트 리스트와 비교해 리스트에 동일한 값이 있으면 넘어가고 없으면 리스트에 추가했다. 마지막으로 정답은 해당 리스트의 크기를 출력해주었다

 

푼사람이 없어서 적절한 풀이인지는 잘 모르겠지만 일단 정답처리는 되었다. 아마 비슷한 맥락내에서 더 효율적으로 구현하는 방법이 있을듯!

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n;

int main(void){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    while(cin>>n){
        vector<int> arr;
        int cnt =0;
        for(int i=0; i<n; i++){
            int temp = 0;
            string str;
            cin >> str;
            
            // 개인 숙련도 비트마스킹
            for(int j=0; j<str.size(); j++){
                temp |= (1 << (str[j]-'0'));
            }
            // 같은 숙련도 종류가 있는지 판별
            bool isSame = false;
            for(int k=0; k<arr.size();k++){
                if(temp == arr[k]){
                    isSame = true;
                }
            }
            if(!isSame){
                arr.push_back(temp);
                cnt++;
            }

        }
        
        cout << arr.size() << endl;
    }
    
    return 0;
}
반응형

'공부합시다 > Algorithm' 카테고리의 다른 글

백준 15663 N과 M (9)  (0) 2021.11.16
백준 15657 N과 M (8)  (0) 2021.11.16
백준 18119 단어암기  (0) 2021.10.31
백준 9372 상근이의 여행  (0) 2021.10.26
백준 3584 가장 가까운 공통 조상  (0) 2021.10.26
Comments