본문 바로가기
공부/코딩테스트

프로그래머스/C# - 원하는 문자열 찾기

by 잰쟁 2024. 3. 27.
728x90

 

문제 설명

알파벳으로 이루어진 문자열 myString과 pat이 주어집니다. myString의 연속된 부분 문자열 중 pat이 존재하면 1을 그렇지 않으면 0을 return 하는 solution 함수를 완성해 주세요.

단, 알파벳 대문자와 소문자는 구분하지 않습니다.

 

 

제한사항

  • 1 ≤ myString의 길이 ≤ 100,000
  • 1 ≤ pat의 길이 ≤ 300
  • myString과 pat은 모두 알파벳으로 이루어진 문자열입니다.

 

입출력

 

 

입출력 예 #1

  • "AbCdEfG"의 0~2번 인덱스의 문자열은 "AbC"이며, 이는 pat인 "aBc"와 같습니다. 따라서 1을 return 합니다.

입출력 예 #2

  • myString의 길이가 pat보다 더 짧기 때문에 myString의 부분 문자열 중 pat와 같은 문자열이 있을 수 없습니다. 따라서 0을 return 합니다.

풀이

 

처음 풀이 : 오답!

 

문자열 내에 지정된 문자열이 있는지 알아내는 함수 : Contains()

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

        if(myString.Contains(pat))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

==> 대소문자를 구분하기 때문에 정답이 될 수 없다!

 


 

대소문자의 구애를 받지 않기 위해 myString 과 pat 모두 대문자로 바꾸어준 후 Contains() 함수를 적용시키자!

※ 소문자 --> 대문자 함수 : ToUpper()

if(myString.ToUpper().Contains(pat.ToUpper()))

 


최종 풀이

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

        if(myString.ToUpper().Contains(pat.ToUpper()))
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
}

 


다른 풀이

 

IndexOf() 함수를 사용하여 문자열의 위치로 풀이!

==> IndexOf() 함수는 해당하는 문자열이 없으면 '-1' 반환!

public class Solution {
    public int solution(string myString, string pat) 
    {
        return myString.ToUpper().IndexOf(pat.ToUpper()) == -1 ? 0 : 1;
    }
}

 

 

Contains(string) 
: 문자열 내에서 지정한 하위 문자열이 발생하는지를 나타내는 값을 반환.

ToUpper()
: 문자열을 대문자로 변환하여 반환.

IndexOf()
: 인스턴스에서 맨 처음 발견되는 지정된 유니코드 문자 또는 문자열의 0부터 시작하는 인덱스를 보고.
  이 인스턴스에 해당 문자나 문자열이 없으면 이 메서드는 -1을 반환.