본문 바로가기

코딩테스트/프로그래머스

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

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


728x90

👩‍💻 코드

#include <string>
#include <vector>
#include <unordered_set>

using namespace std;

vector<int> solution(int n, vector<string> words) {
    unordered_set<string> used_words;
    
    used_words.insert(words[0]);
    char last_char = words[0].back();
    
    for(int i=1; i<words.size(); i++){
        if(last_char != words[i].front() || used_words.find(words[i]) != used_words.end()){
            return {i % n + 1, i / n + 1};
        }
        
        used_words.insert(words[i]);
        last_char = words[i].back();
    }
    
    return {0, 0};
}

📝 풀이

같은 단어를 사용하여 탈락하는 경우를 위하여 unordered_set에 사용된 단어를 저장했다.

단어를 말 할 때마다 find를 이용하여 기존에 존재하는지 확인하고 이미 사용한 단어면 return.

 

앞 사람이 말한 단어의 마지막 글자로 시작하는 단어가 아닌 경우에는 last_char에 마지막 문자를 저장했다.

단어를 말 할 때 마다 저장된 마지막 글자가 말한 단어의 앞 글자와 맞는지 비교 후 다르다면 return.

 

return 할 때는 현재 몇 번째 사람인지와 몇 번째 차례인지를 i와n의 나머지와 몫을 이용하여 구한다.

인덱스는 0부터 시작하고 차례는 1부터 시작하기 때문에 구한 값에 +1를 해주어야 한다.

728x90
반응형