갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 게임 매출 순위
  • c# coroutine
  • C++ 소멸자
  • 롤 골드그래프
  • C++
  • 자바
  • 유니티 그래프
  • 강남 방탈출
  • 글로벌게임매출
  • Unity Graph
  • c# collection
  • 모바일 게임 순위
  • pc 게임 순위
  • 게임 디자인 패턴
  • c# 코루틴
  • C++ virtual
  • 2020년 게임 매출
  • 게임매출순위
  • 유니티 골드그래프
  • c# unboxing
  • c# delegate
  • C# 예외 처리
  • pc게임 순위
  • c# Thread
  • 알고리즘
  • 유니티 그래프 그리기
  • C++ 상속
  • C# boxing
  • 전세계게임매출순위
  • 전세계 게임 매출

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C#] 단어 퍼즐
프로그래밍/문제풀이

[C#] 단어 퍼즐

2020. 5. 8. 22:37
728x90
반응형

문제 설명

 

단어 퍼즐은 주어진 단어 조각들을 이용해서 주어진 문장을 완성하는 퍼즐입니다.

이때, 주어진 각 단어 조각들은 각각 무한개씩 있다고 가정합니다.

예를 들어 주어진 단어 조각이 [“ba”, “na”, “n”, “a”]인 경우 ba, na, n, a 단어 조각이 각각 무한개씩 있습니다.

이때, 만들어야 하는 문장이 “banana”라면 “ba”, “na”, “n”, “a”의 4개를 사용하여 문장을 완성할 수 있지만, “ba”, “na”, “na”의 3개만을 사용해도 “banana”를 완성할 수 있습니다.

사용 가능한 단어 조각들을 담고 있는 배열 strs와 완성해야 하는 문자열 t가 매개변수로 주어질 때, 주어진 문장을 완성하기 위해 사용해야 하는 단어조각 개수의 최솟값을 return 하도록 solution 함수를 완성해 주세요.

만약 주어진 문장을 완성하는 것이 불가능하면 -1을 return 하세요.

 

 

제한사항

  • strs는 사용 가능한 단어 조각들이 들어있는 배열로, 길이는 1 이상 100 이하입니다.
  • strs의 각 원소는 사용 가능한 단어조각들이 중복 없이 들어있습니다.
  • 사용 가능한 단어 조각들은 문자열 형태이며, 모든 단어 조각의 길이는 1 이상 5 이하입니다.
  • t는 완성해야 하는 문자열이며 길이는 1 이상 20,000 이하입니다.
  • 모든 문자열은 알파벳 소문자로만 이루어져 있습니다.

 

입출력 예

입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.

 

입출력 예 #2
ap 1개, ple 1개의 총 2개로 apple을 만들 수 있으므로 필요한 단어 개수의 최솟값은 2를 return 합니다.

 

입출력 예 #3
주어진 단어로는 banana를 만들 수 없으므로 -1을 return 합니다.

 

 

 

using System;

public class wordpuzzle
{
    public static int solution(string[] strs, string t)
    {
        // 1. 최소값을 담을 배열 선언 -> t의 길이보다 크게 초기화
        // 2. 문자열 길이 만큼 반복(문자 하나하나 비교하기 위함)
        // 3. strs에서 요소 하나씩 뽑아 요소의 끝자리와 2번의 문자와 비교
        // 4. 같다면 3의 요소와 2의 문자와 그 앞까지 맞는지 비교
        // 5. 맞다면 1에서 만든 배열의 현재 비교하는 문자의 위치에 +1
        // 6. +1 할 때 요소 길이의 전 값+1 / 요소 길이의 전이 0보다 작다면 그냥 1
        // 7. 5번이 맞아서 +1할 때 6번 조건으로 +1하는데 1의 배열에 들어있는 값이 +1하려는 값보다 작다면 패스 크다면 넣음
        // 8. 1에서 만든 배열의 마지막 요소가 최소값
        // 9. 1에서 만든 배열의 마지막 요소가 배열의 길이보다 크다면 -1 리턴

        // t의 문자와 strs를 비교하며 최소값을 넣을 배열
        int[] strValue = new int[t.Length];

        /* 배열 생성과 초기화 => 아래로 이동
        for (int i = 0; i < t.Length; i++)
            strValue[i] = t.Length + 1;
        */

        // 문자열 길이만큼 반복
        for(int i=0; i<t.Length; i++)
        {
            strValue[i] = t.Length + 1;
            
            // strs의 요소를 하나씩 꺼내서 조사
            foreach(string s in strs)
            {
                // t의 문자 하나와 strs의 요소의 문자열의 끝과 일치하는지 체크
                if (s[s.Length-1]==t[i] && i>=s.Length-1)
                {
                    // s전체 문자열과 t의 부분 문자열과 같은지 체크
                    if(s.Equals(t.Substring(i-s.Length+1, s.Length))) {
                        // i의 값이 s의 길이보다 작다면 IndexError가 나므로 1을 넣고, 아니라면 s 길이만큼의 전 value+1
                        strValue[i] = (i - s.Length) < 0 ? 1 : strValue[i] > strValue[i - s.Length] + 1 ? strValue[i - s.Length] + 1 : strValue[i];
                    }
                }
            }
        }
        // strValue의 마지막 요소의 값이 answer
        // 마지막 요소의 값이 t의 길이보다 크면 만들 수 없는 상황
        return strValue[t.Length - 1] <= t.Length ? strValue[t.Length-1] : -1;
    }

    public static void Main()
    {
        string[] strs = new string[] { "ba", "na", "n", "a" };
        string t = "banana";

        Console.WriteLine(solution(strs, t)); // 3
    }
}
728x90
반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

[파이썬] 프로그래머스 카펫  (0) 2020.04.30
[C#] 프로그래머스 카펫  (0) 2020.04.30
[C#] 올바른 괄호  (0) 2020.04.28
    '프로그래밍/문제풀이' 카테고리의 다른 글
    • [파이썬] 프로그래머스 카펫
    • [C#] 프로그래머스 카펫
    • [C#] 올바른 괄호
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바