◎ 문제
○ 출처
programmers.co.kr/learn/courses/30/lessons/12981
○ 문제 설명
1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.
다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다.
끝말잇기를 계속 진행해 나가다 보면, 3번 사람이 자신의 세 번째 차례에 말한 tank 라는 단어는 이전에 등장했던 단어이므로 탈락하게 됩니다. 사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요. |
○ 제한 사항
|
○ 입출력 예
○ 입출력 예 설명
입출력 예 #1
와 같은 순서로 말을 하게 되며, 3번 사람이 자신의 세 번째 차례에 말한 tank라는 단어가 1번 사람이 자신의 첫 번째 차례에 말한 tank와 같으므로 3번 사람이 자신의 세 번째 차례로 말을 할 때 처음 탈락자가 나오게 됩니다. 입출력 예 #2
와 같은 순서로 말을 하게 되며, 이 경우는 주어진 단어로만으로는 탈락자가 발생하지 않습니다. 따라서 [0, 0]을 return하면 됩니다. 입출력 예 #3
와 같은 순서로 말을 하게 되며, 1번 사람이 자신의 세 번째 차례에 'r'로 시작하는 단어 대신, n으로 시작하는 now를 말했기 때문에 이때 처음 탈락자가 나오게 됩니다. |
○ 작성 예시 코드
using System;
class Solution
{
public int[] solution(int n, string[] words)
{
int[] answer = {};
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.Console.WriteLine("Hello C#");
return answer;
}
}
◎ 나의 문제 풀이
using System.Collections.Generic;
using System.Linq;
class Solution
{
public int[] solution(int n, string[] words)
{
int[] answer = { };
bool wrong_flag = false; // 한번도 틀리지 않을 경우 체크용
int turn = 0; // 끝말잇기 순서 (1번사람, 2번사람)
int circle = 1; // n명의 사람이 각각 1번씩 말한 횟수
List<string> word_list = new List<string>(); // 중복 체크를 위한 리스트
word_list.Add(words[0]); // 첫번째 단어추가
turn++; // 첫번째 단어 추가로 인한 순서 증가
// 첫번째 단어가 이미 추가되었으므로 2번째 단어부터 조회 시작
for (int i = 1; i < words.Length; ++i)
{
++turn;
// 모든인원이 말한 경우 circle을 증가시키고 순서를 초기화
if (turn > n)
{
circle++;
turn = turn - n;
}
var last_word = words[i - 1].Last(); // 이전 단어의 마지막 음절
var next_first_word = words[i].First(); // 현재 단어의 첫번째 음절
// 중복 체크용 리스트에 이미 단어가 존재하거나 이전단어와 현재단어의 음절이 다를 경우 체크
if (word_list.Contains(words[i]) || string.Equals(last_word, next_first_word) == false)
{
wrong_flag = true;
break;
}
// 중복 체크용 리스트에 단어 추가
word_list.Add(words[i]);
}
// 끝말잇기가 정상정으로 진행됐을 경우 각 변수 초기화
if(wrong_flag == false)
{
turn = 0;
circle = 0;
}
answer = new int[] { turn, circle };
return answer;
}
}
'프로그래밍 문제 풀이 > C#' 카테고리의 다른 글
[프로그래밍 문제 풀이] 프로그래머스 - 소수 만들기 (C#) (0) | 2021.03.12 |
---|---|
[프로그래밍 문제 풀이] 프로그래머스 - 내적 (C#) (0) | 2021.03.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 3진법 뒤집기(C#) (0) | 2020.10.14 |
[프로그래밍 문제 풀이] 프로그래머스 - 두 개 뽑아서 더하기(C#) (0) | 2020.10.13 |
[프로그래밍 문제 풀이] 프로그래머스 - 최솟값 만들기 (C#) (0) | 2020.09.10 |