Problem Solving

[Topcoder] SRM159 ~ 164 연습

끄적끄적 2008. 9. 2. 14:19

SRM159 DIV2
: 난이도가 낮은 쉬운 문제.. 문제 읽는 시간을 좀더 단축시킬 필요가 있음.

class StreetParking
{
public:

 int freeParks(string s)
 {
  int n = s.size();
  int ret = 0;
  for(int i=0; i< n; i++)
  {
   if(s[i] != '-')     continue;
   if( (i+1) < n && ( s[i+1] == 'B' || s[i+1] == 'S'))    continue;
   if( (i+2) < n && s[i+2] == 'B')    continue;
   if( (i-1) >= 0 && ( s[i-1] == 'S'))    continue;
   ret++;
  }
  return ret;
 }
};

SRM160 DIV2
: 평이한 문제다. 역시나 toInt, toStr 함수를 유용하게 사용하는 기회였음

class Substitute
{
public:

 int toInt(string s)
 {
  stringstream s1(s);
  int t;
  s1 >> t;
  return t;
 }

 string toStr(int num)
 {
  stringstream s;
  s << num;
  return s.str();
 }

 int getValue(string key, string code)
 {
  int ret;

  string temp;
  int im;
  for(int i=0; i< code.size(); i++)
  {
   for(int j=0; j< key.size(); j++)
   {
    if(code[i] == key[j]){
     im = j+1;
     if(im == 10) im = 0;
     temp += toStr(im);
    }
   }
  }

  ret = toInt(temp);
  return ret;

 }
};

SRM161 DIV2
: 평이한 문제. 이제 슬슬 DIV2 easy문제는 적응되어 가는 걸 느낀다..역시나 문제파악 시간단축이 관건.

class CardCount
{
public:

 vector <string> dealHands(int n, string deck)
 {
  vector<string> ret(n);

  int now = 0;
  int m = deck.size() / n;

  for(int i=0; i< m*n; i++)
  {
   now = i % n;
   ret[now] += deck[i];
  }
  return ret;

 }
};

SRM162 DIV2
: 최소공배수 구하는 함수 짜는걸 헷갈려서 조금 시간이 걸렸다..

class LCMRange
{
public:

 int gcd(int a, int b)
 {
  if(b == 0) return a;
  else return gcd(b, a%b);
 }

 int lcm(int first, int last)
 {
  int ret = 1;
 
  for(int i=first; i<= last; i++)
  { 
   ret = (ret /gcd(ret, i)) * i;
  }

  return ret;

 }
};

SRM163 DIV2
: 이전 문제에서 gcd, lcm 함수를 만들어 놔서 금방 풀 수 있었다.

class Inchworm
{
public:
 int gcd(int a, int b)
 {
  if(b == 0) return a;
  else return gcd(b, a%b);
 }

 int lcm(int a, int b){
  return a * b / gcd(a, b);
 }

 int lunchtime(int branch, int rest, int leaf)
 {
  int ret = 0;

  int l2 = lcm(rest, leaf);
  ret = branch / l2 + 1;
 
  return ret;

 }
};

SRM164 DIV2
: 이틀간 topcoder연습중에 현재까지 가장 좋은 인 7분만에 풀었다. ㅎ;
풀이에 확신이 있어서, 예제중에 하나만 잘 도는지 테스트해보고 바로 submit을 했는데, 다행히 에러가 없었다.

class Justifier
{
public:
 vector <string> justify(vector <string> t)
 {
  vector<string> ret;

  int m = 0;
  int size = 0;
  for(int i=0; i<t.size(); i++)
  {
   size = t[i].size();
   m = max(m, size);
  }

  for(int i=0; i< t.size(); i++)
  {
   string val = t[i];
   while( val.size() != m)
    val = ' ' + val;
   ret.pb(val);
  }

  return ret;

 }
};

반응형