-
[프로그래머스/Level 2] 영어 끝말잇기 (C++)알고리즘 문제풀이/프로그래머스 2020. 10. 31. 00:06
programmers.co.kr/learn/courses/30/lessons/12981
풀이
1. map을 선언한 후 words의 0번째 원소를 키로 하여 1증가 시킨다.
2. 인덱스 번호 1부터 words의 원소들의 값을 키로 하여 1증가 시킨다.
3. 이때 해당 키로 접근한 value가 2번 나왔거나 앞의 첫 문자와 뒤의 끝 문자가 다른 경우 사람의 번호와 단어의 번호를 answer 벡터에 넣고 반복문을 빠져나간다.
4. 사람의 번호는 i를 n으로 나눈 나머지에서 +1, 단어의 번호는 i를 n으로 나눈 몫에서 +1을 하면 된다.
5. 해당 조건을 거치지 않을 경우 answer 벡터의 값은 0이므로 따로 예외처리를 해주지 않아도 된다.
전체 코드
#include <string> #include <vector> #include <map> using namespace std; vector<int> solution(int n, vector<string> words) { vector<int> answer(2); map<string, int> m; m[words[0]]++; // 1부터 반복문 시작할 거라 0은 미리 넣어줌 for(int i=1;i<words.size();i++) { // 뒤 비교해야 해서 1부터 시작 m[words[i]]++; // 단어가 2번 이상 나오거나 앞의 첫 문자와 뒤의 끝 문자가 다른 경우 if(m[words[i]]>1 || words[i].front()!=words[i-1].back()) { answer[0]=i%n+1; // 사람의 번호 0,1,2,0,1,2 ... answer[1]=i/n+1; // 단어의 번호 0,0,0,1,1,1 ... break; } } return answer; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/SQL] SUM, MAX, MIN (MySQL) (0) 2020.10.31 [프로그래머스/SQL] SELECT (MySQL) (0) 2020.10.31 [프로그래머스/Level 2] 점프와 순간 이동 (C++) (0) 2020.10.30 [프로그래머스/Level 2] 소수 만들기 (C++) (0) 2020.10.30 [프로그래머스/Level 2] 스킬트리 (C++) (0) 2020.10.30