[programmers]英語のドラゴンボール
10712 ワード
質問元:[programmers]英語でドラゴンボールを受け取り、https://programmers.co.kr/learn/courses/30/lessons/12981
👨🏫質問する
1番から、番号順に1人ずつ単語を話します. 最後の人は単語を話して、それから1番から始めます. 前の人が言った単語の最後の文字で始まる単語を言うべきです. 以前に表示された単語は使用できません. の単語は認められません. 次は3人で言葉でドラゴンボールを遊ぶ場合です.1号人は最初の順番で戦車を話した. 2番は自分の最初の順番で蹴ると言った. 3番は初めてknowと言いました. 1番の人は自分の2番目の車輪で話しています. (続き) 言葉の接頭辞を続けると、3番の人物が自分の3番目の順番で言ったtankという言葉は以前に出てきた単語だから淘汰されます.
人の数nと人が順番に言った単語をパラメータとする場合は、解法関数を完了し、最初に淘汰された人の番号とその人が自分の何回目に淘汰された後に戻るかを求めてください.
せいげんじょうけんがドラゴンに参加した人数nは2以上10以下の自然数である. 単語は、nまたは100以下の長さで順番に並べられた単語である. 単語の長さは2または50以下です. すべての単語は小文字です. ドラゴンボールで使われている単語の意味は気にしないでください. 正解は[番号、順番]で返してください. 指定された単語に淘汰者がいない場合は、[0,0]を返します. サンプルI/O
1号人:戦車、車輪、母 2番:kick,land,robot 3号人:know,dream,tank 同じ順序で話すと、3人目が3回目に話すtankという言葉は、1人目が1回目に話すtankと同じなので、3人目が3回目に話すと、初めて淘汰者が現れる.
I/O例#2
5人が接戦に参加した1号人:hello,recein,合計 2号人:観察、励まし、 参照3号人:効果、保証、 参照4号人:take,build,推定 5号人:dong,hang,executive 同じ順序で話す場合、この場合、与えられた単語だけを使っても淘汰者は現れない.したがって、[0,0]を返すことができます.
I/O例#3
2人は言葉のやりとりに参加した1号人:hello,even,now,draw 2号人:one,new,world 同じ順序で話すと、1番の人が自分の3番目の順序でnで始まるnowを「r」で始まる単語ではなく、nで始まるnowを話していると、最初の淘汰者が現れます.
💻コード#コード#
👨🏫質問する
1番からn番までのn人は英語の言葉でドラゴンボールをしています英語のドラゴンボールのルールは以下の通りです.
tank → kick → know → wheel → land → dream → mother → robot → tank
上の文字は次の操作を行います.人の数nと人が順番に言った単語をパラメータとする場合は、解法関数を完了し、最初に淘汰された人の番号とその人が自分の何回目に淘汰された後に戻るかを求めてください.
せいげんじょうけん
サンプルI/O
nwordsresult3["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"][3,3]5["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"][0,0]2["hello", "one", "even", "never", "now", "world", "draw"][1,3]
I/O例説明
I/O例#1
3人が接戦に参加した
I/O例#2
5人が接戦に参加した
I/O例#3
2人は言葉のやりとりに参加した
💻コード#コード# import java.util.ArrayList;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
ArrayList<String> list = new ArrayList<>();
boolean flag = false;
int count = 0;
char before = words[0].charAt(0);
for(int i = 1; i <= words.length; i++){
String str = words[i - 1];
// 첫 번째 사람일 때마다 count 증가
if(i % n == 1){
count++;
}
/*
* 이미 나온 단어이거나, 단어의 시작이 이전 단어에서
* 이어지지 않는다면 반복문을 탈출한다.
*/
if(list.contains(str) || before != str.charAt(0)){
flag = true;
if(i % n == 0){
answer[0] = n;
}else{
answer[0] = i % n;
}
answer[1] = count;
break;
}
// 나오지 않은 단어일 경우 list에 추가
before = str.charAt(str.length() - 1);
list.add(str);
}
// 중복된 단어가 나오지 않고 끝말잇기가 끝났다면, answer[]는 [0, 0]이 된다.
if(!flag){
answer[0] = 0;
answer[1] = 0;
}
return answer;
}
}
💡ポスト list
に単語を1つ保存した後、重複する単語が出現したり、単語に接続できなかったりした場合は、残りの演算子を使用して適切な値を返すことができます.
なぜlevel 2問題なのか分かりやすい問題ですが、話の終わりを考えずに、解答にまた5分ほどかかったようです.😅
Reference
この問題について([programmers]英語のドラゴンボール), 我々は、より多くの情報をここで見つけました
https://velog.io/@jaeung5169/Programmers-영어-끝말잇기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.ArrayList;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
ArrayList<String> list = new ArrayList<>();
boolean flag = false;
int count = 0;
char before = words[0].charAt(0);
for(int i = 1; i <= words.length; i++){
String str = words[i - 1];
// 첫 번째 사람일 때마다 count 증가
if(i % n == 1){
count++;
}
/*
* 이미 나온 단어이거나, 단어의 시작이 이전 단어에서
* 이어지지 않는다면 반복문을 탈출한다.
*/
if(list.contains(str) || before != str.charAt(0)){
flag = true;
if(i % n == 0){
answer[0] = n;
}else{
answer[0] = i % n;
}
answer[1] = count;
break;
}
// 나오지 않은 단어일 경우 list에 추가
before = str.charAt(str.length() - 1);
list.add(str);
}
// 중복된 단어가 나오지 않고 끝말잇기가 끝났다면, answer[]는 [0, 0]이 된다.
if(!flag){
answer[0] = 0;
answer[1] = 0;
}
return answer;
}
}
list
に単語を1つ保存した後、重複する単語が出現したり、単語に接続できなかったりした場合は、残りの演算子を使用して適切な値を返すことができます.なぜlevel 2問題なのか分かりやすい問題ですが、話の終わりを考えずに、解答にまた5分ほどかかったようです.😅
Reference
この問題について([programmers]英語のドラゴンボール), 我々は、より多くの情報をここで見つけました https://velog.io/@jaeung5169/Programmers-영어-끝말잇기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol