[C++] 서울에서 김서방 찾기 - int to string

wansuper·2023년 12월 26일
0

CodingTest

목록 보기
12/34

GPT + 나의 풀이 (전체적인 아이디어는 내 몫이었지만 문법이나 string 함수는 gpt의 몫이었다.. 사실상 반 이상 ..)

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "김서방은 "; 				// answer의 첫 글자 초기화
    for (int i = 0; i < seoul.size(); i++) {
        if (seoul[i] == "Kim") { 				// seoul의 원소가 "Kim"과 같다면
            answer += to_string(i); 			// answer에 string으로 변환한 i 삽입 
            answer = answer.append("에 있다");	// append()로 바로 뒤에 삽입
            break;
        }
    }
    std::cout << answer << std::endl; 			// 이걸 해야 testcase를 통한 출력 가능
    return answer;
}

int main() {
    vector<string> testcase = {"Jane", "Suwan", "Kim", "wiseStone"};
    cout << solution(testcase) << endl;
    
    return 0;
}

GPT에 의해 고쳐진 line:

  • line 04: Debugging을 위해 cout을 열심히 두들겼었지만 가장 기초적인 iostream 조차 선언되지 않은 상태였다.
  • line 11: if (seoul[i] == "Kim") {
    string의 내용물을 비교하는 방식은 equal() 함수로만 생각해왔었다. 하지만 찾아보니 compare() 함수로도 찾을 수 있었고, 단순히 위처럼 (seoul[i] == "Kim")으로도 같은지 비교할 수 있었으며, 이외에도 사람들의 풀이는 다양했다.

compare() 함수: str.compare(str2)

str과 str2가 같은지를 비교. 같다면 0, str<str2 인 경우 음수, str>str2 인 경우 양수를 반환

append() 함수: str.append(str2)

str 뒤에 str2 문자열을 이어 붙여줌 ('+' 와 같은 역할)

  • line 12: answer += to_string(i);
    보이는 그대로 현재 초기화된 "김서방은 " 에 if 조건문에 적합한 i를 string으로 바꾸어 "+" 기능으로 추가한 것이다. 여기서 to_string(i)로 string 변환이 이루어졌어야 했는데 기존에 내가 한 방식은 append로 i를 추가하는 것을 생각했었다. 이또한 구글링으로 찾아본 함수였는데 접근 방식이 잘못되었음을 알게되었다. string을 다루고 수를 다룰때는 to_string()으로 한 번 변환 후 접근해야겠다.

  • line 14: break;
    break가 있고 없고의 차이는 문제의 당락을 결정하진 않았다. 하지만 시간 제한이 더 빡셌다면 주요했을수도 있다는 생각이 들었다. 왼쪽이 break; 문을 쓰지 않은 결과이고, 오른쪽이 break; 문을 사용한 결과이다. 미세하지만 0.01~0.02ms의 차이를 보인다는 것을 알 수 있었다.

image.jpg1image.jpg2
  • 위와 같이 testcase를 직접 검증하며 코드를 작성하는 습관을 들이자.
  • 주석도 세세히 달아가며 코드를 작성하자.

다른 사람의 풀이

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "";
    int nIndex = 0;
    for (int i = 0; i < seoul.size(); i++)
    {
        if (seoul[i] == "Kim")
        {
            nIndex = i;
            break;
        }
    }

    answer = "김서방은 " + to_string(nIndex) + "에 있다";

    return answer;
}
  • 내 생각에는 내가 한 방식보다는 이 방법이 더 깔끔한 것 같다.
profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글