본문 바로가기

Algorithm/String

(C++) - 프로그래머스(Summer/Winter Coding(~2018)) : 영어 끝말잇기

반응형

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

구현문제였습니다.

 

풀이방법

 

 1. 이전 단어의 끝 알파벳이 현재 단어의 처음 알파벳과 다르거나 map에 이미 있는 단어라면 번호와 차례를 저장합니다.

 2. 아니라면 매번 말한 단어를 map에 저장합니다.

 

Code

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

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;
    map <string,int> m;
    
    int turn = 0, people = 0;
    for(int i = 0; i < words.size(); i++){
        if(i){
            if(words[i-1][words[i-1].size()-1] != words[i][0] || m[words[i]] == 1){
                turn = i/n + 1;
                people = i % n + 1;
                break;
            }
        }
        m[words[i]] = 1;
    }
    answer.push_back(people);
    answer.push_back(turn);
    return answer;
}