어제 저녁 9시에 있었던 매치다. 집에서 하면 애들때문에 제대로 못할 거 같아서 회사에 남아서 했다.
간만에 500점 문제가 비교적 쉬웠던거 같고, 900문제도 그리 어렵지 않은거 같아 풀었는데 900문제는 문제이해를 잘 못해서 system fail됐다.
500문제를 challenge time에 두명 걸어봤는데, 둘다 실패났다.
9부터 나누어지는 수를 계산하면 되는 문제인데, 정말 엉뚱하게 소스가 빙빙 둘려졌길래..분명히 틀릴 거야 하고 챌린지를 했건만.. 실패라나 ㅎㅎ;
역시 챌린지는 확실할 때만 해야 될 듯하고, 다른 사람 소스를 파악하는 연습을 많이 해야 겠다는 것을 느꼈다.
rating은 1점의 변경도 없이 그대로 고정이다;
250pt.
주어진 스트링에서 A, Z가 들어간 부분만 뒤집고, 다른 char는 원래 자리를 그대로 유지시켜 주는 encrypt 를 구현하는 문제.
string fixTheSpell(string s)
{
string s1;
vector< pair<int, char> > p;
REP(i, s.size())
{
if( s[i] != 'A' && s[i] != 'Z') p.pb(make_pair(i, s[i]));
else s1 += s[i];
}
reverse(ALL(s1));
REP(i, p.size())
{
s1 = s1.substr(0, p[i].first) + p[i].second + s1.substr(p[i].first);
}
return s1;
}
500pt.
주어진 수 N이 숫자 X의 각 자리값들의 곱으로 나타내 진다고 했을때, X가 될 수 있는 최소값을 구하는 문제.
9부터 2까지 나누어질 수 있는 수만큼 나눠주면서 개수를 세면 된다.
class ProductOfDigits
{
public:
int smallestNumber(int N)
{
vector<int> d(8, 0);
if(N == 1) return 1;
for(int i = 9; i>= 2; i--)
{
int pos = 9 - i;
int cnt = 0;
while( N % i == 0 )
{
cnt++;
N /= i;
}
d[pos] = cnt;
}
if( N != 1 ) return -1;
int ret = 0;
REP(i, d.size()) ret += d[i];
return ret;
}
};
반응형