알고리즘/PS - 프로그래머스

[프로그래머스 - C++] 영어 끝말잇기

excited-hyun 2021. 7. 26. 16:21
반응형

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

 

코딩테스트 연습 - 영어 끝말잇기

3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0]

programmers.co.kr

 

풀이

이 문제는 끝말잇기의 룰대로 확인만 해주면 되는 간단한 문제이다.

따라서 이미 말한 단어는 check 벡터에 넣고 중복을 확인하고,

중복되지 않는 경우엔 바로 앞사람이 말한 단어의 마지막 글자가 이번 사람의 단어의 앞글자와 같은지 확인한다.

 

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

using namespace std;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;
    vector<string> check;
    int w = 0;
    int round = 1;
    char bef;
    
    while(w < words.size()){
        for(int i=1; i<=n; i++){
            //첫번째 사람은 확인X
            if(i==1 && w==0){
                
                int len = words[w].length()-1;
                bef = words[w][len];
                check.push_back(words[w]);
                w++;
                continue;
            }
            
            //이미 사용한 단어인지 확인
            string used = words[w];
            auto it = find(check.begin(), check.end(), used);
            if (it != check.end()){
                answer.push_back(i);
                answer.push_back(round);
                return answer;
            }
            
            //앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말한지 확인
            if(bef != words[w][0]){
                answer.push_back(i);
                answer.push_back(round);
                return answer;
            }
            
            int len = words[w].length()-1;
            bef = words[w][len];
            
            check.push_back(words[w]);
            w++;
            
            //탈락자 안 생김
            if(w == words.size()){
                answer.push_back(0);
                answer.push_back(0);
                return answer;
            }
        }
        round++;
    }
    
    
    
    return answer;
}
728x90
반응형