https://school.programmers.co.kr/learn/courses/30/lessons/120904
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int num, int k) {
int answer = 0;
string s;
s=to_string(num);
char t='0'+k;
for(int i=0; i<s.length();i++){
if(s[i]==t){
return i+1;
}
}
return -1;
}
위의 코드가 내가 작성해서 제출한 코드.
아래의 코드가 처음 작성해서 제출한 코드이다. 아래의 코드의 경우는 모든 경우가 return -1을 하는 형태가 되었고, char(k)가 인식이 되지 않는다는 것을 발견하였다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int num, int k) {
int answer = 0;
string s;
s=to_string(num);
for(int i=0; i<s.length();i++){
if(s[i]==char(k)){
return i+1;
}
}
return -1;
}
위와 관련된 이유를 알아내기 위해서 gpt를 통해 문제점을 파악하였다.
char(k)
가 정상 작동하지 않는 이유는 char(k)
에서 k
가 아스키 코드 값으로 해석되기 때문입니다. 즉, char(k)
는 숫자 k
에 해당하는 아스키 문자를 나타냅니다. 아스키 코드에서 0부터 9까지의 숫자는 각각 48부터 57까지의 아스키 코드 값을 갖습니다.
따라서 char(k)
가 아니라, char('0' + k)
로 수정하여야 합니다. 이렇게 하면 k
의 값을 문자 '0'과 더해 해당 숫자에 해당하는 문자를 생성합니다. 아래는 수정된 코드입니다:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int num, int k) {
int answer = 0;
string s;
s = to_string(num);
for (int i = 0; i < s.length(); i++) {
if (s[i] == char('0' + k)) {
return i + 1;
}
}
return -1;
}
이렇게 수정하면 char('0' + k)
는 k
에 해당하는 문자로 올바르게 작동할 것입니다.
결국 캐스팅을 할때 char(a) 형태로 진행하면, 이때에 넣어주는 int a의 값을 아스키 코드상에서의 값으로 파악하기 때문에, 내가 만약 int a = 7일때,이 값을 char로 바꾸고 싶어서 char(7) 이라고 넣어주면, 아스키 코드상에서 7에 해당하는 값으로 변경하게 되는 연산을 하므로, 원하는데로 7로 바뀌지 않는다. 이때에 0,1,2,3,...,8,9 의 경우는 아스키 코드 상에서 48부터 57번 까지에 해당하므로, 해당 수로 변경하기 위해서는 char('0'+ a ) 형태가 되어야 하는 것이다.
다른 사람의 풀이를 보면, 수 자체를 파싱하면서 구하는 형태풀이도 있는데, 해당 풀이를 첨부해보면,
#include <string>
#include <vector>
using namespace std;
int solution(int num, int k) {
int answer = -1;
vector<int>v;
while(num>0){
v.insert(v.begin(),num%10);
num/=10;
}
for(int i=0;i<v.size();i++){
if(k==v[i]){
answer=i+1;
break;
}
}
return answer;
}
이와 같은 형태의 풀이도 충분히 괜찮은 풀이라는 생각이 든다. 혹시 to_string() 함수가 떠오르지 않은 경우는 위와 같은 형태의 풀이를 작성해서 해결해보도록 하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 자릿수 더하기 (0) | 2023.09.28 |
---|---|
Lv 0. n의 배수 고르기 (0) | 2023.09.28 |
Lv 0. 배열의 유사도 - 효율적인 검색을 고려한 rb트리를 이용한 풀이. c++에서는 set *다시 풀어보기* (0) | 2023.09.27 |
Lv 0. 문자열 계산하기 (0) | 2023.09.27 |
Lv 0. 가장 큰 수 찾기 iterator을 이용해서 배열의 인덱스를 찾으려면, distance() 함수를 사용해보자 *다시 풀어보기* (0) | 2023.09.26 |