Deff_Dev

[프로그래머스] 대충 만든 자판 C++ 본문

코딩테스트/프로그래머스

[프로그래머스] 대충 만든 자판 C++

Deff_a 2024. 3. 8. 12:11
 

프로그래머스

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

programmers.co.kr

 

문제

 

이 문제는 누를 때마다 순서대로 문자가 변환되는 keymap을 이용해 targets 문자열을 작성할 때 키보드를 눌러야 하는 촤소 횟수를 구하는 문제이다.

 

을 사용하여 keymap에 할당된 문자 별 눌러야 하는 최소 횟수를 저장하고, targets 벡터에 저장된 문자 별 맵에 저장된 횟수를 더해 answer 벡터에 저장하는 방식으로 문제를 해결했다.

 

만약 맵에 저장된 횟수가 0이라면 해당 문자는 키보드 자판에 할당되어 있지 않으므로 answer 벡터에 -1을 저장한다.

풀이

#include <string>
#include <vector>
#include<map>
// https://school.programmers.co.kr/learn/courses/30/lessons/160586
using namespace std;

// 문자 별 키보드 입력 횟수 저장 맵
map <char,int> keys;

vector<int> solution(vector<string> keymap, vector<string> targets) {
    vector<int> answer;
    
    // 문자 별 키보드 입력 횟수가 가장 적은 횟수를 맵에 저장
    for(int i = 0; i< keymap.size(); i++){
        for(int j = 0; j<  keymap[i].length(); j++){       
            if(keys[keymap[i][j]] == 0 || keys[keymap[i][j]]  > j + 1){
                keys[keymap[i][j]] = j + 1;
            }
        }
    }
  
    // 타겟 문자 별 키보드 입력 횟수 계산
    for(int i = 0; i<targets.size(); i++){
        int result = 0;
        for(int j = 0;j< targets[i].length(); j++){
            // 맵에 저장된 문자 별 입력 횟수가 0일때는 키보드 자판에 없는 문자이므로 -1
            if(keys[targets[i][j]] == 0){
                result = -1;
                break;
            }
            result += keys[targets[i][j]];
        }
            answer.push_back(result);
    }
    
    return answer;
}