Programmers Review

[Lv 2] 영어 끝말잇기

hanseongbugi 2024. 7. 4. 16:11

https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

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

programmers.co.kr

 

영어 끝말잇기의 규칙은 3가지를 준수해야한다.

첫번째는 앞사람이 말한 마지막 문자로 첫번째 문자를 구성해야하는 것

두번째는 이미 나온 단어를 다시 말하면 안된다는 것

마지막은 길이가 1인 단어를 말하면 안되는 것이다.

 

첫번째 규칙은 문자를 비교하여 다를 경우 위배하였다고 판단한다.

두번째 규칙은 map을 사용하여 map에 존재하는 단어의 경우 위배하였다고 판단한다.

마지막 규칙은 length를 비교하여 1인 경우 위배하였다고 판단한다.

 

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

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;
    map<string,bool> m;
    
    int pNum = 1, counter = 1;
    int answerNum = 0, answerCounter = 0;
    char lastChar = words[0][0];
    for(int i = 0;i<words.size();i++){
        if(lastChar != words[i][0]){ // 규칙 3 위배
            answerNum = pNum;
            answerCounter = counter;
            break;
        }
        if(m.find(words[i]) != m.end()){ // 규칙 4 위배
            answerNum = pNum;
            answerCounter = counter;
            break;
        }
        if(words[i].length()==1){ // 규칙 5 위배
            answerNum = pNum;
            answerCounter = counter;
            break;
        }
        lastChar = words[i][words[i].length() - 1];
        pNum++;
        if(pNum > n){
            pNum = 1;
            counter++;
        }
        m[words[i]] = true;
    }
    
    answer.push_back(answerNum);
    answer.push_back(answerCounter);
    return answer;
}