본문 바로가기
알고리즘/프로그래머스

[ 프로그래머스 / Map ] 영어 끝말잇기

by 뎁꼼 2020. 7. 1.

1. 문제


 

 

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

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

 

 

2. 소스코드


- unordered_map을 사용해서 단어의 중복을 체크.

- 단어가 중복되거나, 끝말잇기가 되지 않는 경우, 틀린 위치에서 정답을 갱신 후 리턴.

- 틀린 위치를 기준으로 몇 번째 시행인지, 몇 번째 사람인지 계산한다.

 

소스코드

#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>

using namespace std;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer = {0,0};
    unordered_map<string,bool>map;
    map[words[0]] = true;
    
    for(int i = 1; i < words.size(); ++i){
        if((words[i-1][words[i-1].size()-1] != words[i][0]) or map[words[i]]){
            answer[0] = i % n +1;
            answer[1] = i / n + 1;
            return answer;
        }
        else map[words[i]] = true;
    }
    return answer;
}