Lv 0. 외계어 사전 - string 속에서 string을 찾으려면 find() 함수를, 못찾으면 string::npos를 떠올리자. *다시 풀어보기*

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

 

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(vector<string> spell, vector<string> dic) {
    // cout<<int('a')<<"  "<<int('z'); 아스키코드 상에서 값이 얼마인지 알아보기 위해서 출력
    // a는 97, z는 122. 초기에 chk[100]으로 놓았다가 세그멘테이션 폴트.
    int answer = 0;
    int dlen=dic.size();
    int slen=spell.size();
    for(int i=0; i<dlen; i++){
        int chk[200]={0}; 
        for(auto c: dic[i]){
            chk[c]++;
        }
        bool possible=true;
        for(auto d: spell){
            if(chk[d[0]]==0) possible=false;
        }
        if(possible) return 1;
    }
    return 2;
}

위와 같은 프로그램을 작성하였고, 이때에 주의할 점은, 처음에 아스키코드 상에서 a~z가 값이 얼마인지 제대로 파악하지 않아서

chk[100] 까지만 만들어서 세그멘테이션 폴트 발생하였다. 

그리고 두번째로, spell의 원소들이 string 이어서, 문제에서는 개별적인 알파벳 하나씩 들어있는 형태여서

if(chk[d]==0) possbile =false; 

형태로 코드를 작성했다가, 기대하던대로 작동하지 않아서 보다보니 spell 의 경우 원소의 타입이 string이어서, 해당 string에서 원하는 알파벳을 뽑아내기 위해서 d[0]에 대한 접근을 통해 해당 알파벳을 비교하는데 사용. 

 

다른 사람의 풀이를 보니까 더욱 쉽고 간결하게 해결할만한 풀이가 있어서 첨부해본다. 바로 string 에서 원하는 string이 존재하는지 확인하는 함수인 find 함수를 이용하는 풀이. 오히려 find 함수를 사용해서 쉽게 해결할 수 있도록 만들기 위해서 spell에 주어지는 알파벳들을 string 타입으로 제공해준것인가 싶은 생각이 들었다. 

#include <string>
#include <vector>

using namespace std;

int solution(vector<string> spell, vector<string> dic) {
    int answer = 2;

    for(const auto& v : dic){
        bool test = true;
        for(const auto& t : spell){
            if(v.find(t) == string::npos){
                test= false;
                break;
            }
        }
        if(test){
            answer = 1;
            break;
        }
    }
    return answer;
}

find 함수를 통해서 피검색 스트링에서 검색하고자 하는 목적 스트링을 찾아보고, string::npos 를 반환할시( 찾지 못하면 반환하는 값)

test 불리안을 false로 만들어서 test 불리안이 참일 때에만 1을 출력, 나머지는 2를 출력하는 형태로 프로그램을 작성하였다. 

 

아직 스트링내에서 검색하는 find() 함수와, 해당 함수를 사용했을때 원하는 값이 없는 경우에 반환하는 string::npos에 대해서 잘 알지 못해서 떠올리지 못했는데, 다음에는 find() 함수와 string::npos의 반환 상황에 대해서 떠올려서 한번 활용해서 프로그램을 작성해보도록 하자. 

 

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

Lv 0. 평행  (0) 2023.10.08
Lv 0. 저주의 숫자 3  (0) 2023.10.07
Lv 0. 삼각형의 완성조건 (2)  (0) 2023.10.06
Lv 0. 안전지대  (0) 2023.10.06
Lv 0. 숨어있는 숫자의 덧셈 (2)  (0) 2023.10.06
  Comments,     Trackbacks