끄적끄적 코딩
article thumbnail

2018 KAKAO BLIND RECRUITMENT (2018 카카오 블라인드 채용 문제)

간단한 구현 문제입니다.

1. 숫자인지 확인
1-1. 현재 숫자가 1이고 다음 숫자가 0인지 확인 (숫자 10 확인)
2. S, D, T에 맞게 1번에서 나온 수를 제곱 처리
3-1. * 인경우 이전에 나온 수를 한번 더 결과값에 더하고 현재 값을 2배로 처리
3-2. # 인경우 현재값에 -1을 곱셈
4. 다음이 숫자이면 현재 값을 결과값에 더하고 이전값에 현재값을 저장, 현재값 초기화.
1~4번 반복

* 숫자가 나왔을 때 결과값에 더해주었으므로 마지막 결과값은 반복문이 끝난 후에 넣어주었습니다.

#include <iostream>
#include <string>
using namespace std;

int solution(string dart)
{
  int num = 0;
  int prevNum = 0;
  int answer = 0;
  int length = dart.length();
  bool check = false;

  for (int i = 0; i < length; ++i)
  {
    if (dart[i] >= '0' && dart[i] <= '9') 
    {
      if (check)
      {
        !check;
        answer += num;
        prevNum = num;
        num = 0;
      }
      num = dart[i] - '0';
      if (dart[i] == '1' && dart[i + 1] == '0')
      {
        num = 10;
        ++i;
      }
      check = true;
    }
    if (dart[i] == 'S')
    {
      continue;
    }
    if (dart[i] == 'D')
    {
      num = num * num;
    }
    if (dart[i] == 'T')
    {
      num = num * num * num;
    }
    if (dart[i] == '*')
    {
      num *= 2;
      answer += prevNum;
    }
    if (dart[i] == '#')
    {
      num *= -1;
    }
  }

  return answer + num;
}

검색 태그