SRM173 DIV2
: 코딩속도를 높이기 위해서 REP 를 define하고 쓰는 연습을 해봤다.
#define REP(I,N) for(int I=0;I<(N);I++)
class ProgressBar
{
public:
string showProgress(vector <int> t, int c)
{
int tot = 0, cur = 0;
REP(i,t.size()) tot += t[i];
REP(i,c) cur += t[i];
int doing = 20.0 * cur / tot;
string ret(20, '.');
REP(i,doing) ret[i] = '#';
return ret;
}
};
SRM174 DIV2
평이한 문제
class CrossWord
{
public:
int countWords(vector <string> b, int s)
{
int ret = 0;
REP(i, b.size())
{
int cnt = 0;
string val = b[i];
REP(j, val.size())
{
if(val[j] == '.')
{
cnt++;
}
else
{
if( cnt == s) ret++;
cnt = 0;
}
}
if( cnt == s) ret++;
}
return ret;
}
};
SRM175 DIV2
: 8분이내로 시간단축 성공
class ClockWalk
{
public:
int finalPosition(string f)
{
int ret = 0;
REP(i, f.size())
{
if(f[i] == 'h') ret += (i+1);
else ret -= (i+1);
}
ret = ret % 12;
if(ret <= 0 ) ret += 12;
return ret;
}
};
SRM176 DIV2
: 문제파악이 오래걸린 문제..
전에도 한번 느꼈는데.. 아래 128을 더하거나 빼주는 부분을
( rgb[i]+128 ) % 256 으로 구현할 수 있는 사고의 전환이 필요.
class RGBColor
{
public:
vector <int> getComplement(vector <int> rgb)
{
VI ret;
int r = 255 - rgb[0];
int g = 255 - rgb[1];
int b = 255 - rgb[2];
if( abs(rgb[0] - r) > 32 || abs(rgb[1] - g) > 32 || abs(rgb[2] - b) > 32 )
{
ret.pb(r);
ret.pb(g);
ret.pb(b);
}
else
{
REP(i,3)
{
if(rgb[i] - 128 >= 0) ret.pb(rgb[i] - 128);
else ret.pb( rgb[i]+128 );
}
}
return ret;
}
};
SRM177 DIV2
: 다른사람들 경우 이중 for문을 돌렸으나, 나는 o(n)이니 좀더 나은건가..ㅎㅎ;
class Stairs
{
public:
int designs(int m1, int m2, int h, int w)
{
int ret = 0;
int r = 0, t = 0;
for(int i=1; i<= max(h,w); i++)
{
if((h % (i+1)) != 0 || (w % i != 0)) continue;
r = h / (i+1);
t = w / i;
if( r <= m1 && t >= m2) ret++;
}
return ret;
}
};
SRM178 DIV2
: 4분만에 푼 문제... 문제도 워낙 간단하고, stringstream을 이용하면 간단한 문제.
class SimpleCalculator
{
public:
int calculate(string input)
{
int a, b;
char c;
stringstream in(input);
in >> a >> c >> b;
if( c == '+') return a+b;
else if(c == '-')return a-b;
else if(c == '*') return a*b;
else return a/b;
}
};
SRM179 DIV2
: 두번째 for문을 for(int j= max(i-k, 0); j<i; ++j) 로 짜는게 더 가독성이 높다.
class OnLineRank
{
public:
int calcRanks(int k, vector <int> s)
{
int ret = 0, cur = 0, rank = 0, cnt = 0;
REP(i, s.size())
{
cur = s[i];
rank = 1;
cnt = 0;
for(int j=i-1; j>=0 ; j--)
{
if(cnt++ == k) break;
if( s[j] > cur) rank++;
}
ret += rank;
}
return ret;
}
};
SRM180 DIV2
: 심플한 문제..
class DinkyFish
{
public:
int monthsUntilCrowded(int t, int m, int f)
{
int ret = 0, born = 0;
while( 2*t >= m+f )
{
born = min(m, f);
m += born;
f += born;
ret ++;
}
return ret;
}
};