본문 바로가기

Algorithm

삼성 SW 역량테스트 5658. 보물상자 비밀번호

반응형

 

 

 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

 

중요한 점은  STL 사용시 iterator를 사용한다면 end() 참조시에 그 값은 공백이라는 점.

마지막 내용을 참조하고 싶으면 it = de.end(); 후에 *(it) 가 아니고 *(--it)를 사용해야 한다.

그리고 스트링을 int로 바꾸는 방법은 algorithm 헤더 선언 후에 atoi(str.c_str())이거지만

그냥 char형을 int로 바꾸는 방법은 char ch; 에서 ch-'0' 해주면 된다.

 

 

 

 

 

 

#include <iostream>
#include <string>
#include <deque>
#include <queue>
#include <algorithm>


#include <cmath>
#include <map>

using namespace std;


int N,K;






int calcul(string s)
{
    int sum = 0;

for(int i =0; i<s.size(); i++)
{
if(s[i] == 'A')
{
        sum += 10*pow(16,s.size()-(i+1));

}
else if(s[i] == 'B')
{
 sum += 11*pow(16,s.size()-(i+1));

}
else if(s[i] == 'C')
{
 sum += 12*pow(16,s.size()-(i+1));

}
else if(s[i] == 'D')
{
 sum += 13*pow(16,s.size()-(i+1));
 
}
else if(s[i] == 'E')
{
 sum += 14*pow(16,s.size()-(i+1));

}
else if(s[i] == 'F')
{
 sum += 15*pow(16,s.size()-(i+1));
 
}
else{
sum += (s[i]-'0')*pow(16,s.size()-(i+1));

}

}

return sum;


}


int main(int argc, char** argv)
{
int test_case;
int T;


string str;

cin>>T;
/*
   여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for(test_case = 1; test_case <= T; ++test_case)
{
        map<string,bool> m;
        priority_queue<int, vector<int>, less<int> > pq;
        deque<char> de;
        deque<char>::iterator it;
        
        
        cin >> N >> K;
        cin >> str;

for(int i = 0; i<str.size(); i++)
{
de.push_back(str[i]);

}

int count  = 1;







while(1)
{


if(count == N)
break;




string temp;


for(it =de.begin(); it != de.end(); it++)
{
temp += *it;
}





int countx = 0;
int idx = 0;

while(1)
{

if(countx >= N)
break;
string save;

for(; idx < countx+N/4; idx++)
{
save += temp[idx];
}


countx += N/4;
if(!m.count(save))
{

int x =calcul(save);

m[save] = true;
pq.push(x);
}
}

it = de.end();
char owari = *(--it);
de.pop_back();
de.push_front(owari);



count++;


}
   
   


int start = 1;

while(start < K)
{


pq.pop();
start++;
}
        
        cout <<"#"<<test_case<<" "<<pq.top()<<endl;
        
        
        



}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

반응형