대충 만든 자판

2025. 2. 7. 00:21·코딩 테스트/프로그래머스

문제

문제 해석

*. 처음에는 그냥 한번만 순회하면 되는 줄 알고 풀었다가 5분 정도 날려먹었다.

1. 문자 1개가 각 키맵의 버튼을 대상으로 가장 작은 입력횟수를 찾아 입력횟수에 더해나간다.

2. 만약 가장 작은 입력횟수를 찾아나갈 때, 해당하는 키가 존재하지 않는다면 targets의 해당 원소는 완성될 수 없다.

3. 문자 1개씩 keymap의 각 원소에서 가장 작은 입력 횟수를 찾아나간다.

4. 갱신이 안 되었다면 이 Target은 완성할 수 없다.

코드

#include <string>
#include <vector>
#include <limits>

using namespace std;

constexpr int INT_MAX = numeric_limits<int>::max();

vector<int> solution(vector<string> keymap, vector<string> targets) {
    vector<int> answer;
    
    // targets[0]를 대상으로 생각해보면
    // 문자 1개가 각 키맵의 버튼을 대상으로 가장 작은 입력횟수를 찾아 입력횟수에 더해나간다.
    // 만약 가장 작은 입력횟수를 찾아나갈 때, 해당하는 키가 존재하지 않는다면 targets의 해당 원소는 완성될 수 없다.
    for(string& Target : targets)
    {
        int TargetTotalCount = 0;
        for(int TargetAlphaIDX = 0; TargetAlphaIDX < Target.length(); ++TargetAlphaIDX)
        {
            // 문자 1개씩 keymap의 각 원소에서 가장 작은 입력 횟수를 찾아나간다.
            int InputCount = INT_MAX;
            for(string& Key : keymap)
            {
                for(int IDX = 0; IDX < Key.length(); ++IDX)
                {
                    if(Key[IDX] == Target[TargetAlphaIDX])
                    {
                        if(IDX + 1 < InputCount)
                        {
                            InputCount = IDX + 1;
                        }
                        break;
                    }
                }
            }
            
            // 갱신이 안 되었다면 이 Target은 완성할 수 없다.
            if(InputCount == INT_MAX)
            {
                TargetTotalCount = -1;
                break;
            }
            
            TargetTotalCount += InputCount;
        }
        
        answer.push_back(TargetTotalCount);
    }
    return answer;
}

다른 사람의 풀이

1. map을 이용해 각 문자에 대한 최소한의 입력값을 찾아낸다. 최소한의 입력값이 0이 아니면 target을 완성해낼 수 있지만 0이 찾아지면 해당 문자열은 완성할 수 없으므로 -1을 배열에 담으면 된다.

 

회고

1. 시간 제한에 걸리지 않아서 풀 수 있었지만 앞으로는 map을 사용하는 습관을 들일 필요가 있다.

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

성격 유형 검사하기  (0) 2025.03.10
둘만의 암호  (0) 2025.02.24
문자열 나누기  (0) 2025.02.07
체육복  (0) 2025.02.04
숫자 짝궁  (2) 2025.02.03
'코딩 테스트/프로그래머스' 카테고리의 다른 글
  • 성격 유형 검사하기
  • 둘만의 암호
  • 문자열 나누기
  • 체육복
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Unreal Engine 5
    스파르타 코딩 클럽
    팀 프로젝트
    반복문
    정리
    WINAPI
    과제
    map
    책 정리
    Study
    정렬
    문자열
    C++
    Til
    프로그래머스
    코딩테스트
    배열
    코딩 테스트 합격자 되기 c++ 편
    코딩 테스트
    이중 반복문
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
대충 만든 자판
상단으로

티스토리툴바