본문 바로가기
c++/프로그래머스

[프로그래머스] 접미사인지 확인하기(c++)

by ilp 2024. 1. 28.
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181908

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr



#include <bits/stdc++.h>
using namespace std;

int solution(string my_string, string is_suffix) {
    int result;
    vector<string> suffix;
    
    for(int i=0;i<my_string.size();i++){
        suffix.push_back(my_string.substr(i,my_string.size()-i));
    }
    
    if(find(suffix.begin(),suffix.end(),is_suffix)!=suffix.end()){
        result=1;
    }
    else{
        result=0;
    }
    
    return result;
}

 

1. 변수

  • 'result': 'is_suffix'가 'my_string'의 접미사인지 여부를 저장한다.
    (접미사면 1, 아니면 0)
  • 'suffix': 'my_string'의 모든 가능한 접미사를 저장한다.

2. 접미사 생성

  • 'for'을 사용하여 'my_string'의 모든 가능한 접미사를 생성한다.
    이를 위해 'substr'을 사용하여 'i'부터 마지막 까지의 부분 문자열을 추출한다.
    ('i'는 1부터 'my_string'의 길이까지 증가한다.)

3. 접미사 확인

  • 'find'함수를 사용하여 'suffix' 안에서 'is_suffix' 문자열을 찾는다.
    만약 'is_suffix'가 'suffix' 안에 없다면, 'find'함수는 'suffix.end()'를 반환한다.
  • 'if'문을 통해 'find'함수의 반환값이 'suffix.end()'와 다른지 확인한다.
    다르면'is_suffix'는 'my_string'의 접미사이므로 'result'를 1로 한다.
    같으면 'is_suffix'는 접미사가 아니므로  'result'를 0으로 한다.

4. 결과

  • 'result' 변수를 반환한다.(1은 접미사,0은 아님)

 

 

참고

'std::find' 함수

  • 주로 vector에서 특정 요소를 찾는데 사용한다.
    지전된 범위에서 값을 찾고, 그 값을 가리키는 반복자를 반환한다.
  • '<agorithm>' 해더파일에 있다.
find(시작 반복자, 끝 반복자, 찾고자 하는 값);
if(find(prefix.begin(),prefix.end(),is_prefix)!=prefix.end()){

- '시작 반복자'와 '끝 반복자'는 검색할 범위를 지정하고, '찾고자 하는 값'이 찾으려는 요소이다.

  (찾는 값이 있으면 해당 값의 반복자를 반환하고, 찾는 값이 없으면 마지막 반복자 'end()'를 반환한다.)

- 마지막 반복자 'end()'와 다른지를 사용해서 vector안에 찾으려 하는 값이 있는지 확인 할 수 있다. 

 

 

'substr' 함수

  • 문자열의 특정 부분을 추출하는데 사용한다.
str.substr(시작 인덱스, 길이);
my_string.substr(0,i)

- '시작 인덱스'는 추출을 시작하는 위치, '길이'는 추출할 문자열의 길이이다.

- 'my_string' 문자열에서 0번째(처음)부터 i만큼 을 추출할 수 있다.

 

 

가능한 모든 접미사를 생성하고 생성된 접미사에 'is_suffix'를 찾고 그에 따라 결과를 반환하는 프로그램이다.

그러나 이렇게 하면 모든 접미사르 생성하고 저장해야 하기 때문에 메모리 사용량이 크고

'find'함수를 사용할때 시간이 많이 소요된다.

 

하지만 이 문제에서는 시간소요와 메모리 사용에 대한 조건이 없었고, 큰 문자열을 담당하지 않기 때문에 이렇게 풀어도 됬었다.


반응형