반응형

문제 링크

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

 

풀이 )

  각 행에 대해서 주어진 값에 대해서 비트연산 OR를 한 후 2진법으로 바꿔

  '1'자리에 '#', '0'자리에 ' '을 각각 넣어준다.

 

#include <string>
#include <vector>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for(int i = 0; i < n; ++i){
        int tmp = arr1[i]|arr2[i];
        string str;
        for(int i = 0; i < n; ++i){
            str = (tmp%2?'#':' ') + str;
            tmp/=2;
        }
        answer.push_back(str);
    }
    return answer;
}
반응형
반응형

문제 링크

 

코딩테스트 연습 - [1차] 다트 게임

 

programmers.co.kr

 

풀이 ) 

  문자열을 앞에서부터 한 문자씩 읽는다.

  숫자 3개를 저장할 배열을 만들고 숫자가 나올때마다 인덱스를 늘려 각 배열에 넣는다.

  1이 오는 경우 뒤에 0이 와서 10이 되는 경우가 있기 때문에 뒤에 0이 오는지 확인하고 0이 오면 배열에 10을 저장하고 문자열에서 한 문자만큼 더 이동시킨다.

 

  S D T에 대해서, S가 오는 경우 건너뛰고, D가 오는 경우 제곱, T가 오는 경우 세제곱해준다.

 

  #이 오는 경우 해당 숫자에 -1을 곱하고, 마지막으로 *이 오는 경우 가장 앞에 오는 경우가 아니면 앞 숫자까지 2를 곱해준다.

 

  마지막으로 배열에 저장된 3개의 값을 더해주어 답을 구한다.

#include <string>
#include <iostream>

using namespace std;

int solution(string dartResult) {
    int answer = 0;
    int score[3] = {0, };
    int len = dartResult.size();
    int idx_score = -1;
    
    for(int i = 0; i < len; ++i){
        if(dartResult[i] == '1'){
            idx_score++;
            if(dartResult[i+1] == '0'){
                score[idx_score] = 10;
                i++;
            }
            else{
                score[idx_score] = 1;
            }
        }
        else if('0' <= dartResult[i] && dartResult[i] <= '9'){
            idx_score++;
            score[idx_score] = dartResult[i]-'0';
        }
        else if(dartResult[i] == 'S')
            continue;
        else if(dartResult[i] == 'D')
            score[idx_score] *= score[idx_score];
        else if(dartResult[i] == 'T')
            score[idx_score] *= score[idx_score] * score[idx_score];
        else if(dartResult[i] == '#')
            score[idx_score] *= -1;
        else{
            if(idx_score > 0){
                score[idx_score-1] *= 2;
            }
            score[idx_score] *= 2;
        }
    }
    answer = score[0] + score[1] + score[2];
    return answer;
}

 

주의점 )

  • 10이 나오는 경우
반응형

+ Recent posts