본문 바로가기
코딩테스트/프로그래머스

[Lv.0-C] 원하는 문자열 찾기

by 요호유후 2025. 6. 10.
반응형

▶ 문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181878#

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

▶ 풀이

#include <stdio.h>
#include <string.h>

int solution(const char* myString, const char* pat) {    
    if(strlen(myString) < strlen(pat)) return 0;

    int idx = 0;

    for(int i = 0; i < strlen(myString); i++) {
        if(myString[i] == pat[idx] || abs(myString[i] - pat[idx]) == 32) idx++;
        else idx = 0;

        if(idx == strlen(pat)) return 1;
    }  

    return 0;
}

 

⭐ 풀이 노트
  📌 line  5 : pat이 길 경우 어차피 성립 안 되기 때문에 바로 return 0;
  📌 line 10 : ASCII 코드 기준 'A'와 'a' 즉, 대문자와 소문자의 값 차이는 32 인 것을 활용
                     toupper(), tolower()로 사용 가능 (함수 최대한 안 쓰고 싶어서 위와 같이 작성해봄)
                     💡 가독성을 요할 경우 toupper()나 tolower()를 쓰는게 나을 수도 있음 (ctype.h 헤더필요)


⭐ 개선할 수 있는 부분
  📌 line  9 : strlen()은 문자열 길이를 매번 계산하므로 불필요하게 반복 호출됨
                     변수에 미리 저장하는 것이 좋음
                     ex) int len = strlen(myString);
                           for(int i = 0; i < len; i++) ...

 

strcasestr() 함수
문자열 haystack 안에 대소문자 구분 없이 문자열 needle이 포함되어 있는지 찾는 함수

⭐ 함수 원형
      char *strcasestr(const char *haystack, const char *needle);

⭐ 반환 값
      포함 : needle이 시작되는 주소 반환
               ex) "Hello World", "lo" => "lo World" 반환
      미포함 : NULL 반환

 

 

반응형

댓글