[프로그래머스 1단계] 둘만의 암호 - c++ (사례 3, 17,18, 19해결)
성공한 코드
풀이방법
아래와 동일하게 1인 것과 0인것들로 분류했다.
근데 이때 0인것인지 아닌지 검사를 하지 않기 위해 vector에다가 1인 것들을 넣어주었다.
// 정수값을 char로 캐스팅하여 벡터에 추가
char charValue = static_cast<char>(i);
이렇게해서 벡터에다가 아스키코드 -> 문자로 해서 넣어주었다
이렇게 안해주고 바로 넣어주려고 하니깐 /u000이런 이상한 출력이 나왔다.
그 다음 가장 핵심이
z %= vec.size(); 이부분이다.
나머지 연산에 대해 학습하심 좋을 것 같다.
만약 현재 위치에서 index값 더했을 때의 vector값을 answer에 더해주면 된다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
int arr [150]={0, };
int k=0;
sort(skip.begin(), skip.end());
for(int i= 97; i<=122; i++){
if((int)skip[k]==i){
arr[i]=0;
k++;
}
else {
arr[i]=1;
continue;
}
}
vector<char> vec;
for(int i= 97; i<=122; i++){
if(arr[i]==1){
// 정수값을 char로 캐스팅하여 벡터에 추가
char charValue = static_cast<char>(i);
vec.push_back(charValue);
}
else {
continue;
}
}
for(int j=0; j<s.size(); j++){
for(int i=0; i<vec.size(); i++){
int z=i+index;
if(z>=vec.size())
{ z %= vec.size();}
if(s[j]==vec[i]){
answer+=vec[z];}
else{
continue;
}
}
}
return answer;
}
문제를 해결하는데 도움이 되었던 질문
https://school.programmers.co.kr/questions/46092
사례 3, 17,18, 19 해결 못한 코드
풀이방법
(아마 이 코드도 위의 해결 방법을 적용하면 해결할 수 있을 것이라고 생각이 든다.)
skip에 있는 것들은 다 0으로 바꿔주고 아닌것들은 1로 해주고 즉, 1인 arr[i] 인 i가 skip하지 않아도 되는 것들이다.
근데 이렇게 되면 0인경우와 아닌경우를 구분해 줘야해서 효율적인 측면에서 별로 좋지 않은 것 같아서 위의 코드를 보시는 것을 추천드린다.
아스키코드를 이용해서 문제를 풀었고 122(z)보다 클 경우에는 26을 빼줘서 다시 a로 돌아가게 해주었다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
string solution(string s, string skip, int index) {
string answer = "";
int arr [150]={0, };
int k=0;
sort(skip.begin(), skip.end());
for(int i= 97; i<=122; i++){
if((int)skip[k]==i){
arr[i]=0;
k++;
}
else {
arr[i]=1;
continue;
}
}
int cnt;
for(int i=0; i<s.size(); i++){
cnt =0;
for(int j=1; j<=26; j++){
if((int)s[i]+j>122){
if(arr[(int)s[i]+j-26]==0){
continue;
}
else{
cnt ++;
}
if(cnt == index){
answer+=s[i]+j-26;
break;
}
}
else{
if(arr[(int)s[i]+j]==0){
continue;
}
else{
cnt ++;
}
if(cnt == index){
answer+=s[i]+j;
break;
}
}
}
}
return answer;
}
정답률 55%
[프로그래머스 1단계] 가장 가까운 같은 글자 -c++ (0) | 2024.02.24 |
---|---|
[프로그래머스 1단계] 실패율 - c++ (테스트 6,7,9,13,24 실패 해결) (0) | 2024.02.24 |
[프로그래머스 1단계] 콜라 문제 -c++ (0) | 2024.02.24 |
[프로그래머스 1단계] 문자열 나누기 - c++ (1) | 2024.02.23 |
[프로그래머스 1단계] 햄버거 만들기 c++ (1) | 2024.02.10 |
댓글 영역