[C++] 프로그래머스 서울에서 김서방 찾기
2020. 11. 16.
반응형

programmers.co.kr/learn/courses/30/lessons/12919

 

코딩테스트 연습 - 서울에서 김서방 찾기

String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. 제

programmers.co.kr

 

1. 서론

 

level 1의 간단한 문제다. 일종의 탐색 문제?

 

2. 문제 풀이

 

String 배열에서 Kim의 index를 찾는다. 그리고 "김서방은 index에 있다"라고 출력한다.

문제 자체는 아주 간결하다. 나는 배열에서 "Kim" 이 발견되면 answer에 값을 넣게 하고 출력했다. 

 

3. 코드 설명

 

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "";
    int i;
    
    for (i = 0; i < seoul.size(); i++)
        if(seoul[i] == "Kim")
            answer += "김서방은 " + to_string(i) + "에 있다";
    
    return answer;
}

 

seoul은 문자열이 담긴 배열이다. 배열을 한 바퀴 돌면서 Kim이 있는지 탐색하고 발견시에 answer에 넣어준다. 

answer는 문자열이므로 숫자인 i를 담을 수 없기 때문에 to_string() 함수를 써서 숫자 i를 문자 i로 변환해준다.

 

오늘도 다른 사람들의 코드를 봤는데 나처럼 for문을 돌려서 찾지 않고 find() 함수를 써서 찾는 사람들을 봤다.

 

#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "";
    int pos=find(seoul.begin(),seoul.end(),"Kim")-seoul.begin();
    answer="김서방은 "+to_string(pos)+"에 있다";
    return answer;
}

 

이런 식인데 -seoul.begin()을 안 해주면 에러가 난다고 한다. find() 함수의 return 값은 iterator 값이라고 한다...

난 iterator도 모르고 find도 모른다... 공부 해야지

 

 

 

 

 

 

 

 

 

 

 

반응형
myoskin