목록코테/백준 (3)
경주장
문제를 이해하는데 조금 어려웠습니다. 게임판에 핀이 나란히 있고 다음칸이 비어있다면 두 핀은 모두 사라지고 다음칸에 핀이 생깁니다. 첫번째 TC : ###...### ..oo..... .....oo.. ......... ###...### moveCnt 0 , pinCnt 4 => ###...### ....o.... .....oo.. ......... ###...### moveCnt 1 , pinCnt 3 => ###...### ....o.... ....o.... ......... ###...### moveCnt 2 , pinCnt 2 => ###...### ......... ....o.... ......... ###...### moveCnt 3 , pinCnt 1 게임의 규칙과 위의 TC에서 알 수 있듯..
컴파일러의 동작방식을 참고하여 동작을 구현하였습니다. compiler가 text code를 읽을때 가상의 dot(bar)을 설정하여 keyword와 operation를 처리하는 flow를 떠올렸습니다. 문제에서 연산자 우선순위는 왼쪽부터 이므로 적용이 수월합니다. expression에서 괄호를 적용 할 수 있는 가장 좌측의 operation의 앞에 | (bar)를 두고 괄호를 적용한것, 하지 않은것 두개의 expression으로 분화 시킵니다. 이때 동작이 종료되는 것은 bar가 operation의 가장 오른쪽 idx를 넘어 가는 것으로 확인 할 수 있습니다. children expression을 queue에 넣어 bfs방식으로 구현하였습니다. 이때 괄호를 적용하지 않은 child는 단순히 bar를 한칸..
FSA문제이다. 아래 그림처럼 state를 나타내어 풀었다. 이정도만 그려두고 state D의 조금 복잡한 transition방식은 문제를 풀며 수정하였다. 1. state diagram #include #include using namespace std; string solution(vector s) { string ans; char state = 'S'; for(int i = 0 ; i < s.size() ; i ++) { bool c = s[i]; switch (state) { case 'S': state = c ? 'A' : 'Z'; break; case 'A': state = c ? 'F' : 'B'; break; case 'B': state = c ? 'F' : 'C'; break; case ..