https://school.programmers.co.kr/learn/courses/30/lessons/12981#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer;
int personNum = 0;
int personOrder = 0;
for(int i=1; i<words.size(); i++)
{
// 현재 문자열과 이전 문자열을 담을 변수
string preStr;
string nextStr;
// 현재 문자열, 이전 문자열 할당
preStr = words[i-1];
nextStr = words[i];
// 끝말 잇기 실패
if(nextStr[0] != preStr[preStr.length()-1])
{
cout << "끝과 처음 다름, order = " << i << endl;
// 사람 번호 찾기, 만약 나머지가 0 이라면 딱 나누어져 떨어지므로 n 으로 할당
personNum = (i+1) % n;
if(personNum == 0)
personNum = n;
// 사람 차례 찾기
personOrder = i / n +1;
// answer에 값 할당
answer.push_back(personNum);
answer.push_back(personOrder);
break;
}
// 끝말 잇기 성공
else
{
// 중복된 문자 있는지 탐색
for(int j=0; j<i; j++)
{
if(nextStr == words[j])
{
cout << "중복된 문자, order = " << i << endl;
// 사람 번호 찾기, 만약 나머지가 0 이라면 딱 나누어져 떨어지므로 n 으로 할당
personNum = (i+1) % n;
if(personNum == 0)
personNum = n;
// 사람 차례 찾기
personOrder = i / n +1;
// answer에 값 할당
answer.push_back(personNum);
answer.push_back(personOrder);
// 예외 처리
// 중복된 문자와 끝말 잇기 실패했을 경우가 있었기 때문에...
goto end;
}
}
}
}
end:
cout << "personNum = " << personNum << endl;
cout << "personOrder = " << personOrder << endl;
// 모두 성공했을 때, [0,0] 할당
if(answer.size() == 0)
{
answer.push_back(0);
answer.push_back(0);
}
return answer;
}
'코딩 테스트 > 프로그래머스 코딩테스트' 카테고리의 다른 글
문자열을 정수로 바꾸기 (0) | 2024.05.18 |
---|---|
문자열 내 p와 y의 개수 (0) | 2024.05.18 |
[미해결] 괄호 회전하기 (0) | 2022.11.27 |
다리를 지나는 트럭 (0) | 2022.11.27 |
다음 큰 숫자 (0) | 2022.11.22 |