• Feed
  • Explore
  • Ranking
/
/
    CodingTest

    코딩테스트 준비 - 반지

    혼자서 다시푸는 코딩테스트 준비 일지 - 42
    브루트포스문자열
    B
    Brocolling
    2024.10.20
    ·
    4 min read

    다시푸는 코딩 테스트 준비 일지

    • 응시 사이트 : BOJ

    • 문제 : 5555.반지

    • 사용언어 : C#

    • 난이도 : 하

    • 풀이시간 : 7m

    • 유형 : 브루트포스, 문자열

    문제

    당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 거꾸로 읽는 걱정은 없다.

    찾고자하는 문자열이 주어졌을 때 그 문자열을 포함하는 반지가 몇 개인지를 발견하는 프로그램을 작성하라.

    입력

    입력은 총 2 + N 줄 이다.

    첫 번째 줄에는 1 자 이상 10 자 이하의 대문자로 구성된 찾고자 하는 문자열이 적혀있다.

    두 번째 줄에는 반지의 개수 N (1 ≦ N ≦ 100)이 적혀있다.

    2+i 줄(1 ≦ i ≦ N)엔 i개의 반지에 새겨져있고, 10 문자로 이루어진 문자열이 적혀있다.

    출력

    찾고자하는 문자열을 포함 반지의 개수를 나타내는 정수를 한 줄로 출력하라.

    예제 입력 1

    ABCD
    3
    ABCDXXXXXX
    YYYYABCDXX
    DCBAZZZZZZ
    

    예제 출력 1

    2

    예제 입력 2

    XYZ
    1
    ZAAAAAAAXY

    예제 출력 2

    1

    예제 입력 3

    PQR
    3
    PQRAAAAPQR
    BBPQRBBBBB
    CCCCCCCCCC

    예제 출력 3

    2

    문제 풀이 접근

    이 문제는 최근 풀어본 문제중에 가장 쉬운 문제였다.
    단순히 입력을 받고 첫번째 줄의 문자열이 존재하는지만 알면된다.

    그렇게, 바로 풀릴 것이라고 생각해서 제출을 했으나, 예시 2번의 케이스가 걸렸다.
    ZAAAAAAXY 의 문자열에서 XYZ 가 있는 지 찾아야한다.
    이 문제의 핵심인 부분으로 보이긴한다.

    이 문자열이 왜 반지가 있는 것으로 확인되냐면, ZAAAAA"XYZ"AAAAXY 처럼 연결되어있는 구조라면 XYZ 가 찾아지기때문에, 문자열이 있는것으로 판단한다.

    이 문제는 입력받은 문자에서 + [0] 해서 한 문자만 추가하는 것이아니라, 연결되어있는 문자열을 만들어주면 된다.
    그냥 쉽게 입력받은거 한번더 증감 연산자로 += Input 해서 연결하라는 것이다.

    그렇게 연결해서 Contain 함수를 사용하면 쉽게 구할 수 있다.

    작성 코드 (C#)

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using static CodingTestProj.Program;
    
    /*
     * Difficulty : Easy
     * URL : https://www.acmicpc.net/problem/5555
      * Time : 7m
     */
    
    
    //mobitel
    namespace CodingTestProj
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                var ss = new Solution();
                ss.Solve();
            }
        }
    
        public class Solution
        {
            public int n;
            public int ret;
    
            public string target;
    
            public void Solve()
            {
                ret = 0;
                target = string.Empty;
    
                target = Console.ReadLine();
                n = Int32.Parse(Console.ReadLine());
    
                for(int i  = 0; i < n; ++i)
                {
                    string input = Console.ReadLine();
                    input += input;
    
    
                    if (input.Contains(target) == true)
                        ++ret;
                }
    
                print();
            }
    
            public void print()
            {
                Console.WriteLine(ret);
            }
        }
    }

    코드 결과

    until-1836






    - 컬렉션 아티클