[2021.03.26] 코딩테스트 공부

web comdori·2021년 3월 26일
0

문자열 관련 문제를 대비하여 정규표현식 공부함.

  • 정규표현식 관련 글 따로 작성함.

2018 코딩테스트 문제2번을 풀면서 잘못했던 점은.. 문자열만 자를 생각부터 먼저하다보니 문제를 자세히 보지 않았다... 자세히 봤으면 자르고 시작하는 것이 아니었다..

예제를 보고 내가 문제를 잘 이해했는지 꼭 살펴보자!

  • 너무 복잡하게 생각하지말고 단순하게 풀자!
  • 어차피... 미리 생각 안해놓으면 코드 짜면서 다시 생각해야하니깐... 그리고 생각보다 문제가 복잡하니깐.. 미리 거의 손으로 로직은 짜놓고 코드로 옮기자!
  • 문제 정말 이해 잘하자... 급할 수록 돌아가자...!!
  • 문제 미리 다 짜 놓으면 오히려 빠르다는 사실을 잊지말자!
    - 오래 끌었던 이유는 문제를 제대로 이해 안해서이다.. 사실 제대로 봤으면 진작에 풀었을 것이다.... 제대로 확인하자!!
#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<char> options;
vector<int> scores;

void init_options(string &result)
{
	for (int i = 0; i < 4; i++) {
		options.push_back('-');
	}

	int idx = 2;

	for (int i = result.length() - 1 ; i >= 0; i--) {
		if ((result[i] == '*') || (result[i] == '#')) {
			options[idx] = result[i];
		}
		if ((result[i] == 'S') || (result[i] == 'D') || (result[i] == 'T')) {
			idx--;
		}
	}
}

bool is_digit(char c)
{
	if ((c >= '0') && (c <= '9'))
		return true;

	return false;
}

int get_score(string score, char square)
{
	int iscore = stoi(score);
	if (square == 'S')
		return iscore;
	else if (square == 'D')
		return iscore * iscore;
	else
		return iscore * iscore * iscore;
}

void init_scores(string& result)
{
	int idx = 0;
	string score;
	for (int i = 0; i < result.length(); i++) {
		if (is_digit(result[i])) {
			score.push_back(result[i]);
		}
		if ((result[i] == 'S') || (result[i] == 'D') || (result[i] == 'T')) {
			idx++;
			scores.push_back(get_score(score, result[i]));
			score = "";
		}
	}
}

int solution(string& result)
{
	init_options(result);
	init_scores(result);

	// calc answer
	int sum = 0;
	for (int i = 0; i < 3; i++) {
		int score = 0;
		switch (options[i]) {
		case '-':
			score = scores[i];			
			break;
		case '*':
			score = scores[i] * 2;
			break;
		case '#':
			score = scores[i] * -1;
			break;
		}

		if (options[i + 1] == '*')
			score *= 2;

		sum += score;
	}

	return sum;
}

int main()
{
	string result = "1D2S3T*";
	int answer = solution(result);
	return 0;
}
profile
(wanna be a) Full-Stack Engineer

0개의 댓글