본문 바로가기

code/programmers

2018 카카오 블라인드 테스트 2번

문제 링크:

 

카카오 신입 공채 1차 코딩 테스트 문제 해설

‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인으로 치러졌습니다. 지원자들의 개발 능력을 잘 검증하기 위해 출제 위원들이 한 땀 한 땀 독창적이고 다양한 문제들을 만들어 냈고 문제에 이상은 없는지, 테스트케이스는 정확한지 풀어보고 또 풀어보며 […]

tech.kakao.com

입출력:

TC# 입력 출력
1 1S2D*3T 37
2 1D2S#10S 9
3 1D2S0T 3
4 1S*2T*3S 23
5 1D#2S*3S 5
6 1T2D3D# -4
7 1D2S3T* 59

 

코드:

/* 1. 자기 자신에 대한 곱셈을 두번 하면 세제곱이 아니라 네제곱! */

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string in;
int scr[3] = { -1, -1, -1 };
char bns[3], opt[3];
int ans;

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> in;

	int i = 0;
	for (auto ch : in) {
		if ('0' <= ch && ch <= '9') {
			if (bns[i] != 0) {
				scr[++i] = ch - '0';
			}
			else {
				switch (scr[i]) {
				case  1: scr[i] = 10;		break;
				case -1: scr[i] = ch - '0'; break;
				}
			}
		}
		else {
			switch (ch) {
			case 'S': case 'D': case 'T':	bns[i] = ch; break;
			case '*': case '#':				opt[i] = ch; break;
			}
		}
	}

	for (int i = 0; i < 3; ++i) {
		switch (bns[i]) {
		case 'D': scr[i] *= scr[i];			 break;
		case 'T': scr[i] *= scr[i] * scr[i]; break;
		}

		switch (opt[i]) {
		case '*':
			if(i > 0)
				scr[i - 1] *= 2;
			scr[i] *= 2; break;
		case '#':
			scr[i] *= -1; break;
		}
	}

	for (auto s : scr)
		ans += s;

	cout << ans;
	return 0;
}