[プログラマー]英語のドラゴンボールC+-文字列


🧐質問する


https://programmers.co.kr/learn/courses/30/lessons/12981
1番からn番までのn人は英語の言葉でドラゴンボールをしています英語のドラゴンボールのルールは以下の通りです.
1番から数字順に単語を話す
最後の人が単語を言ったら、1番から始めます.
前に会った人が言った単語の最後の文字で始まる単語を言います.
以前に現れた言葉は使用できません.
一字であることを認めない単語
次は3人で言葉でドラゴンボールを遊ぶ場合です.
tank → kick → know → wheel → land → dream → mother → robot → tank
言葉の接頭辞を続けると、3番の人物が自分の3番目の順番で言ったtankという言葉は以前に出てきた単語だから淘汰されます.
人の数nと人が順番に言った単語をパラメータとする場合は、解法関数を完了し、最初に淘汰された人の番号とその人が自分の何回目に淘汰された後に戻るかを求めてください.

🐥解き方

  • ワードベクトル回りに回転し、이전 단어의 마지막 문자현재 단어의 첫 문자が同じであることを確認する
  • すでに出現した単語があるかどうか=>map
  • を利用する.
  • の条件が満たされると、地図
  • が挿入される.
  • の条件が異なる場合は、現在のインデックスとシーケンスが出力され、ゲームに問題がない場合は{0,0}が出力されます.
  • 👉🏻Mapには<word,1>というようにキーに単語を入れ、値に1を入れます.map[word] != 0でなければ、すでに存在していることを意味します.

    コード#コード#

    #include <string>
    #include <vector>
    #include <iostream>
    #include <map>
    
    using namespace std;
    
    vector<int> solution(int n, vector<string> words) {
     
        map<string,int> map;
        map[words[0]]++;
        
        for(int i = 1; i < words.size(); i++) {
            if(map[words[i]] || words[i].front()!= words[i-1].back())
                return {(i%n)+1,(i/n)+1};
            map[words[i]]++;
        }
        
        return {0,0};
    }

    🕶振り返る


    重複は存在せず、setを利用しようとしたばかりです.あまり複雑ではないことに気づきました.文字列なので、ベクトルの前後を利用すると、簡単に思い出せません.