상세 컨텐츠

본문 제목

[프로그래머스 1단계] 둘만의 암호 - c++ (사례 3, 17,18, 19해결)

알고리즘/프로그래머스 1단계

by 셉인 2024. 2. 23. 22:49

본문

728x90

[프로그래머스 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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

사례 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%

728x90

관련글 더보기

댓글 영역