• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01

[프로그래밍 문제 풀이] 프로그래머스 - 영어 끝말잇기 (C#)

프로그래밍 문제 풀이/C# 2020. 10. 20. 18:44

 

◎ 문제

 

○ 출처

 

programmers.co.kr/learn/courses/30/lessons/12981

 

○ 문제 설명

 


1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다.

  1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다.
  2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다.
  3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.
  4. 이전에 등장했던 단어는 사용할 수 없습니다.
  5. 한 글자인 단어는 인정되지 않습니다.

다음은 3명이 끝말잇기를 하는 상황을 나타냅니다.

tank → kick → know → wheel → land → dream → mother → robot → tank

위 끝말잇기는 다음과 같이 진행됩니다.

  • 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다.
  • 2번 사람이 자신의 첫 번째 차례에 kick을 말합니다.
  • 3번 사람이 자신의 첫 번째 차례에 know를 말합니다.
  • 1번 사람이 자신의 두 번째 차례에 wheel을 말합니다.
  • (계속 진행)

끝말잇기를 계속 진행해 나가다 보면, 3번 사람이 자신의 세 번째 차례에 말한 tank 라는 단어는 이전에 등장했던 단어이므로 탈락하게 됩니다.

사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

 

○ 제한 사항

 


  • 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다.
  • words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하입니다.
  • 단어의 길이는 2 이상 50 이하입니다.
  • 모든 단어는 알파벳 소문자로만 이루어져 있습니다.
  • 끝말잇기에 사용되는 단어의 뜻(의미)은 신경 쓰지 않으셔도 됩니다.
  • 정답은 [ 번호, 차례 ] 형태로 return 해주세요.
  • 만약 주어진 단어들로 탈락자가 생기지 않는다면, [0, 0]을 return 해주세요.

 

○ 입출력 예

 

 

○ 입출력 예 설명

 


입출력 예 #1
3명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : tank, wheel, mother
  • 2번 사람 : kick, land, robot
  • 3번 사람 : know, dream, tank

와 같은 순서로 말을 하게 되며, 3번 사람이 자신의 세 번째 차례에 말한 tank라는 단어가 1번 사람이 자신의 첫 번째 차례에 말한 tank와 같으므로 3번 사람이 자신의 세 번째 차례로 말을 할 때 처음 탈락자가 나오게 됩니다.

입출력 예 #2
5명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : hello, recognize, gather
  • 2번 사람 : observe, encourage, refer
  • 3번 사람 : effect, ensure, reference
  • 4번 사람 : take, establish, estimate
  • 5번 사람 : either, hang, executive

와 같은 순서로 말을 하게 되며, 이 경우는 주어진 단어로만으로는 탈락자가 발생하지 않습니다. 따라서 [0, 0]을 return하면 됩니다.

입출력 예 #3
2명의 사람이 끝말잇기에 참여하고 있습니다.

  • 1번 사람 : hello, even, now, draw
  • 2번 사람 : one, never, world

와 같은 순서로 말을 하게 되며, 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
블로그 이미지

BlackTopaz

e-mail : vluebear@naver.com

,

카테고리

  • 분류 전체보기 (80)
    • Programming (3)
      • C# (0)
      • Unity (0)
      • 디자인패턴 (3)
    • 프로그래밍 문제 풀이 (75)
      • C# (49)
      • MySQL (26)
    • 개발 일지 (0)
      • Project_EDM (0)
    • 디버깅 & 오류 해결 로그 (2)
      • Unity (2)

태그목록

  • Unity Error
  • 유니티 에러
  • 게임프로그래밍
  • 프로그래밍 문제 풀이
  • 디자인패턴
  • 유니티
  • Unity
  • 프로그래머스
  • mysql
  • C#

글 보관함

달력

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

BlackTopaz

블로그 이미지

e-mail : vluebear@naver.com

LATEST FROM OUR BLOG

RSS 구독하기

LATEST COMMENTS

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바