프로그래머스 코딩테스트 연습

[프로그래머스 코테 C#] Lv1. 원하는 문자열 찾기

노재두내 2024. 3. 27. 11:54

<문제>

알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. 

myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.

 

<입출력 예>

 


<나의 풀이과정>

먼저 대소문자를 구분하는지 확인하기 위해서 Console.WriteLine으로 한 번 찍어보자

같으면 "똑같아요"를 출력하고 다르면 "달라요"를 출력하도록 한다.

using System;

public class Solution {
    public int solution(string myString, string pat) {
        int answer = 0;
        if(myString[0]==pat[0])
        {
            Console.WriteLine("똑같아요");
        }
        else
        {
             Console.WriteLine("달라요");
        }
        return answer;
    }
}

같은 A여도 대/소문자가 다를 경우에는 달라요를 출력하는 모습 ! 

 

대소문자를 통일 시켜줘야겠다는 생각이 들었다. 

myString.ToUpper();
pat.ToUpper();

이렇게 하고, 그 문자열 안에 문자열 있는지 확인하는 함수가 있었던거같은데 .. 기억 안나니까 

일단 for문으로 확인해볼까

이중 for문을 생각하긴 했는데

for(int i=0;i<myString.Length;i++)
        {
            for(int j=0;j<pat.Length;j++)
            {
                
            }
        }

pat 모든 값이 같은지는 .. 알 수 없을거같다.

결국 다시 구글링 해서

이거 쓰면 되려나?

 

두 문자열 모두 대문자로 변환한 후에 Contains로 bool return 값이 뭐가 나오는지 찍어봤다.

using System;

public class Solution {
    public int solution(string myString, string pat) {
        int answer=0;
        myString.ToUpper();
        pat.ToUpper();
        bool b = myString.Contains(pat);
        Console.WriteLine(b);
        return answer;
    }
}

둘다 false가 나왔다. 

myString.ToUpper(); 쓴다고 문자열 자체가 변환되는게 아니었음

bool b = myString.ToUpper().Contains(pat.ToUpper());

그러니까 이렇게 해서 Contains를 확인해봄

이번에는 True False로 제대로 나왔다! 

이제 이걸 True이면 1이 나오고 False이면 0이 출력되도록 하자 

       if(b)
        {
            answer=1;
        }
        else
        {
            answer=0;
        }

통과!!!

 

<나의 풀이 전체 코드>

using System;

public class Solution {
    public int solution(string myString, string pat) {
        int answer=0;
        bool b = myString.ToUpper().Contains(pat.ToUpper());
        if(b)
        {
            answer=1;
        }
        else
        {
            answer=0;
        }
        return answer;
    }
}

이번 문제는 내 힘으로 풀기 보다는 구글링을 많이 해서 아쉽다. 

다음부터는

ToUpper()과 

Contains() 기억하기 !


<다른 사람 풀이>

보통 삼항연산자를 많이 썼다. 

1. Contains를 안쓰고 IndexOf를 씀

using System;

public class Solution {
    public int solution(string myString, string pat) {

        return myString.ToUpper().IndexOf(pat.ToUpper()) == -1 ? 0 : 1;
    }
}

Indexof가 무엇인가 찾아보자


String.IndexOf 메서드

이 인스턴스에서 맨 처음 발견되는 지정된 유니코드 문자 또는 문자열의 0부터 시작하는 인덱스를 보고합니다.

이 인스턴스에 해당 문자나 문자열이 없으면 이 메서드는 -1을 반환합니다.

public int IndexOf (string value, int startIndex, int count);

이렇게 많이 쓰는데

value

검색할 문자열입니다.

 

startIndex

검색을 시작할 위치입니다.

 

count

검사할 문자 위치의 수입니다.

이게 가장 이해하기 쉬운 예시다.

 

참고한 블로그

https://sungeun97.tistory.com/109

 

[C#] Array와 String에서 IndexOf 사용하기

1. Array IndexOf(Array, Object) 지정된 요소를 검색하고 1차원 배열에서 처음으로 나타나는 요소의 인덱스를 반환한다. Parameters 1. Array - 검색할 1차원 배열 2. Object - 배열에서 찾을 요소 Returns 지정된 요

sungeun97.tistory.com


즉 ! 

 return myString.ToUpper().IndexOf(pat.ToUpper()) == -1 ? 0 : 1;

인스턴스에 해당 문자나 문자열이 없으면 이 메서드는 -1이 반환되고, -1이랑 ==(같으면) 0을 return해라

있으면 즉 , -1이 아니면 1을 return 해라

이런거였다!!