프로그래머스

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

programmers.co.kr

문제 조건

  • keymap[i]는 i + 1번 눌렀을 때 바뀌는 문자이다.
  • answer는 targets[i] 문자열을 만들기 위해 키를 눌러야하는 최소 횟수들을 더한 것이다.
  • targets[i] 문자열을 작성할 수 없을 때는 -1을 리턴한다. 

문제 풀이

  1. 각 문자마다 최소 횟수들을 저장하기 위해 char을 key, int를 value로 가지는 m을 선언한다.
  2. map에 각 keymap[i][j]의 j + 1 중 최솟값을 저장한다.
  3. m에 targets[i][j]가 있다면 count에 targets[i][j]를 더하고 아니라면 count = -1을 한 후 answer에 담는다.
  4. targets의 모든 원소에 해당 작업이 수행된 후 answer 리턴
#include <string>
#include <vector>
#include <map>

using namespace std;

vector<int> solution(vector<string> keymap, vector<string> targets) {
    vector<int> answer;
    map<char, int> m;
    
    for(int i = 0; i < keymap.size(); i++) {
        for(int j = 0; j < keymap[i].size(); j++) {
            if(m.find(keymap[i][j]) != m.end()) {
                if(m[keymap[i][j]] < j + 1)
                    continue;
                else
                    m[keymap[i][j]] = j + 1;
                }
            else {
                m[keymap[i][j]] = j + 1;
            }
        }
    }
    
    for(int i = 0; i < targets.size(); i++) {
        int count = 0;
        for(int j = 0; j < targets[i].size(); j++) {
            if(m.find(targets[i][j]) != m.end())
                count += m[targets[i][j]];
            else {
                count = -1;
                break;
            }
        }
        answer.push_back(count);
    }
    
    return answer;
}

'프로그래머스 > 1레벨' 카테고리의 다른 글

[프로그래머스/C++] 덧칠하기  (0) 2023.06.29
[프로그래머스/C++] 추억 점수  (0) 2023.06.29
카드 뭉치/C++  (0) 2023.02.28
개인정보 수집 유효기간/C++  (0) 2023.02.06
둘만의 암호/C++  (0) 2023.02.03

+ Recent posts