그럴듯한 개발 블로그
반응형

https://school.programmers.co.kr/learn/courses/15008/lessons/121685

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

stack에 나머지를 순서대로 저장해서 유전법칙의 맨 위쪽부터 검사해 줬다. RR, rr이 한 번이라도 생기면 그 아래는 다 같으므로 먼저 종료해 줬다. 1,1이 케이스로 들어오는지 모르겠지만 이 부분도 처리해 줬다.

#include <string>
#include <vector>
#include <stack>

using namespace std;

vector<string> solution(vector<vector<int>> v) {
    vector<string> answer;
    
    for (int i = 0; i < v.size(); i++) {
        stack<int>  stk;
        int state = -1; // 0 == RR 1,2 == Rr 3 == rr
        int col = v[i][0], row = v[i][1] - 1; // idx로 넣기 위해
        
        if (col == 1) { // 첫번째거는 무적권 
            answer.push_back("Rr");
            continue ;
        }
        
        for (int j = 0; j < col - 1; j++) { // 마지막건 빼줘야함 맨 위껀 노필요
            stk.push(row % 4);
            row /= 4;
        }
        while (!stk.empty()) {           
            if (stk.top() == 0) { // RR
                state = 0;
                break ; // rr, RR은 같은애들만 나오므로 반복문 더 돌 필요없음
            }
            else if (stk.top() == 3) { // rr
                state = 3;
                break ;
            }
            else
                state = 1;
            stk.pop();
        }
        if (state == 0)
            answer.push_back("RR");
        else if (state == 3)
            answer.push_back("rr");
        else
            answer.push_back("Rr");
    }
    return answer;
}
반응형
profile

그럴듯한 개발 블로그

@donghyk2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!