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

Kim Nahyeong·2022년 10월 28일
0

프로그래머스

목록 보기
38/38

#include <string>
#include <vector>
#include <iostream>
#include <map>

using namespace std;
map<string, int> m;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;
    int pnum = 0; // 사람 넘버 0부터 세기
    int turn = 1; // 사람들 1번쨰 턴부터 세기
    
    for(int i = 0; i < words.size(); i++){
        m[words[i]]++; // word가 나온 수 세기
        
        // 같은 단어 말해서 탈락
        if(m[words[i]] > 1){
            answer.push_back(pnum + 1); // 0부터 시작이니까
            answer.push_back(turn);
            break;
        }
        
        // 다른 단어 말해서 탈락
        if(i > 0 && (words[i-1][words[i-1].size()-1] != words[i][0])){
            answer.push_back(pnum + 1); // 0부터 시작이니까
            answer.push_back(turn);
            break;
        }
        
        pnum = (pnum + 1) % n;
        
        // 한 바퀴 돈 경우
        if(pnum == 0){
            turn++; // 차례 세기
        }
    }
    
    if(answer.empty()){
        answer.push_back(0);
        answer.push_back(0);
    }

    return answer;
}
  • string의 첫문자와 마지막 문자를 이렇게 접근했는데
if(i > 0 && (words[i-1][words[i-1].size()-1] != words[i][0])){}

굉장히 비효율적으로 코드를 짰다... string도 그냥 벡터처러
words[i-1].front(), words[i].back() 이렇게 접근할 수 있었음... 이런

  • 그리고 1>2>3>1>... 이렇게 돌아가는 것은 삼성 문제 덕분에 %를 이용해서 잘 구했는데 몇번째 턴인지는 그냥 /를 써서 구하면 됐었다 바보...

이 분이 진짜 코드 효율적이고 깔끔하게 잘 짜신듯.

0개의 댓글