https://school.programmers.co.kr/learn/courses/30/lessons/120895
#include <string>
#include <vector>
using namespace std;
string solution(string str, int num1, int num2) {
string answer = "";
swap(str[num1],str[num2]);
answer=str;
return answer;
}
*주의사항*
처음에 솔루션 함수가 아래와 같이 주어지는데,
#include <string>
#include <vector>
using namespace std;
string solution(string my_string, int num1, int num2) {
string answer = "";
return answer;
}
이때에 값을 복사하는 과정을 하지 않고 그대로 주어지는 my_string을 사용해서 변형시키기 위해서 &을 사용한 풀이를 작성하기 위해서
string& my_string 이라고 변형해서 함수를 바꾸고 나서 제출해보니,
/tmp/solution_test-5912f7.o: In function `main':
solution_test.cpp:(.text+0x823): undefined reference to `solution(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
이와같은 오류 메세지를 받을 수 있었다. 이에 대해서 지피티에 검색해보니
이 오류는 링커 오류(linker error)로 보입니다. 링커는 여러 소스 파일 간의 함수 및 변수를 연결하는 작업을 수행합니다. 여기서는 `solution()` 함수가 정의되지 않았다는 오류 메시지입니다.
문제 해결을 위해 다음을 확인해야 합니다:
1. `solution()` 함수가 정의되어 있는지 확인해주세요. 함수 정의가 이루어진 소스 파일이 있는지 확인하고, 함수 시그니처가 일치하는지 확인해야 합니다. 함수 정의가 빠져있는 경우 이러한 링크 오류가 발생합니다.
2. 함수 정의와 관련된 헤더 파일이 포함되어 있는지 확인하세요. 함수 정의가 다른 파일에 있고 해당 헤더 파일이 포함되어 있지 않다면, 링커는 함수 정의를 찾지 못할 것입니다.
3. 컴파일 및 링크 명령줄이 올바르게 구성되어 있는지 확인하세요. 모든 소스 파일과 라이브러리 파일이 명령줄에 포함되어 있어야 합니다.
4. 빌드 도구 (예: CMake 또는 Makefile)를 사용하는 경우, 빌드 스크립트 또는 프로젝트 구성이 올바로 설정되어 있는지 확인하세요. 함수가 올바른 위치에 정의되어 있는지 확인하고, 컴파일러와 링커 옵션도 확인해야 합니다.
모든 것이 올바르게 구성되었는데도 이 오류가 발생한다면, 컴파일러나 빌드 환경의 문제일 수 있으므로 컴파일러 버전과 설정을 검토해야 할 것입니다.
이와 같은 답변을 받을 수 있었는데, 아무래도 여기서 1번의 경우가 가장 문제가 되는것이 아닌가 싶다.
형태가 예시로 준 것은 string my_string 이라는 형태로 인자를 전달하는데, 내가 인자를 전달하는 방식을 string& my_string이라고 변형한것이 가장 문제가 될만한 부분이라는 생각이 들고 그게 연관되 있을 확률이 가장 높은건 1번이다.
프로그래머스에서 문제를 풀때 solution 함수를 변경시킬때 &을 활용해서 원본을 수정하도록 하는 형태는 주의하도록 하자.
이와같은 문제를 또 발생시킬 것이다.
만약 다음에도 더 효율적인 형태로 작성하겠다고 &을 활용했는데 똑같은 오류 메세지를 받게 된다면, 다시한번 이와 같은 경우를 떠올려 보도록 하자.
추가적으로, 나의 경우는 swap() 함수를 사용한 풀이를 하였는데,
다른 사람의 풀이를 보면 swap 함수를 사용하지 않고 푸는 풀이가 있어서 첨부해본다. 충분히 swap 함수가 떠오르지 않는다면 이와 같은 풀이를 이용하더라도 충분히 좋은 풀이라고 생각한다.
#include <string>
#include <vector>
using namespace std;
string solution(string my, int num1, int num2) {
string answer = "";
for(int i = 0; i < my.length(); i++)
{
if(i == num1)
answer += my[num2];
else if (i == num2)
answer += my[num1];
else answer += my[i];
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 약수 구하기. *다시 풀어보기* (0) | 2023.09.26 |
---|---|
Lv 0. 한 번만 등장한 문자. (0) | 2023.09.26 |
Lv 0. 영어가 싫어요 *다시 풀어보기* (0) | 2023.09.26 |
Lv 0. 대문자와 소문자 (0) | 2023.09.25 |
Lv 0. 암호 해독 (0) | 2023.09.25 |