질문 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12981
문제 설명
n명이 1부터 n까지 영어 엔딩을 반복하고 있습니다.
영어 엔딩은 다음 규칙을 따릅니다.
- 한 번에 한 사람씩 번갈아 가며 1부터 시작하여 숫자 순서대로 단어를 말하세요.
- 마지막 사람이 말을 한 후에는 숫자 1부터 다시 시작합니다.
- 앞에 있는 사람이 말한 단어의 마지막 글자로 시작하는 단어를 말해야 합니다.
- 이전에 등장한 단어는 사용할 수 없습니다.
- 단일 문자 단어는 허용되지 않습니다.
다음은 세 사람이 엔딩을 반복하는 상황을 나타냅니다.
탱크→킥→알다→바퀴→땅→꿈→엄마→로봇→탱크
이 엔딩을 계속 반복하면 3라운드에서 3명이 말한 탱크라는 단어는 이전에 등장했기 때문에 제거됩니다.
인원수 n과 순서대로 말한 단어를 매개변수로 주면 먼저 탈락한 인원수와 탈락횟수를 찾아 반환하는 솔루션 함수가 완성된다.
한계
- 참여자 수 n은 2 이상 10 이하의 자연수이다.
- words는 n보다 크거나 같고 100보다 작은 길이로 끝 시퀀스에 사용된 단어를 순서대로 포함하는 배열입니다.
- 단어 길이는 2자 이상 50자 이하여야 합니다.
- 모든 단어는 알파벳의 소문자로만 구성됩니다.
- 끝에 사용된 단어의 의미(의미)에 대해 걱정할 필요가 없습니다.
- 답은 (숫자, 차례) 형식으로 돌려주세요.
- 주어진 단어가 누락되지 않은 경우 (0, 0)을 반환합니다.
1. 문제 이해
만능 엔딩 캐릭터, 앞사람의 말과 같은 글자로 끝나는 단어가 생각나거나 같은 단어를 말하면 게임에서 탈락
입력으로 게임에 참여하는 사람의 수, 단어 목록
그 대가로 탈락한 사람의 수, 그 사람이 탈락한 라운드
2. 논리를 상상하라
(1) 게임 참여자(참여): 참여자는 0부터 시작하여 최종 참여자 n에 도달하면 참여 값을 0으로 재설정합니다.
(2) 턴을 기록해야 합니다.
논리 1에 초기값 1인 턴 변수를 추가합니다.
(3) 비정상적인 가정
- (3-1) 엔딩이 이전과 일치하지 않는 경우(예: 지금 -> 시간)
- (3-2) 검색 종료 시 누락된 항목이 없는 경우
- (3-3) 반복되는 단어가 나타날 때
3-1의 경우 현재 선택된 단어가 n번째 숫자이면 n-1번째 단어의 마지막 글자를 가져와서 현재 선택된 단어의 첫 글자와 비교하여 일치하는 것이 없으면 반환한다.
3-2의 경우 로직이 모두 실행되면 메인 for 문 외부로 반환된다.
3-2의 경우 n번째 단어에서 n번째 제시된 단어가 이미 한번 이상 제시된 적이 있는지 확인한다.
여기서 for 문은 for 문을 통해 현재 단어와 이전 단어를 비교하여 반복하면 반환하는 데 사용됩니다.
3. 코드로 구현
클래스 솔루션 {
공개 int() 솔루션(int n, String() 단어) {
int() 답변 = {0,0};
int parti = 0; //게임 참가자
turn = 1; // 게임 라운드
String now_word = “” ; // 현재 단어
String pre_word = “”; // 이전 단어
for(int i=0; i
if (부분 == n){ (//(1) 논리
부분 = 0;
++로 전환; // (2) 논리
}
부분++;
// (3-1) 논리
now_word = 단어(i);
만약 (i > 0) {
pre_word = 단어(i-1);
char last_char = pre_word.charAt(pre_word.length() – 1);
char now_char = now_word.charAt(0);
if (!
(last_char == now_char)) {
답(0) = 부분;
답(1) = 회전;
답변을 반환하십시오.
}
}
// (3-3) 논리
for(int j=0; j< i; j++){
if (단어(j).equals(now_word)) {
답(0) = 부분;
답(1) = 회전;
답변을 반환하십시오.
}
}
}
// (3-2) 논리
답변을 반환하십시오.
}
}