Menu
Coddy logo textTech

맵 값 검색

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 55번째.

challenge icon

챌린지

쉬움

맵(map)에서 특정 값과 연관된 모든 키를 찾는 역방향 조회 시스템을 구현하는 프로그램을 작성하세요. 이 챌린지는 맵 순회, 값 비교, 그리고 벡터 구축을 결합하여 키-값 쌍을 효율적으로 검색하는 능력을 테스트합니다.

다음과 같은 입력이 제공됩니다:

  • 맵에 추가할 키-값 쌍의 개수를 나타내는 정수 n
  • 그 다음 n 쌍의 입력, 각각은 다음으로 구성됩니다:
    • 키를 나타내는 문자열 key
    • 값을 나타내는 정수 value
  • 검색할 값을 나타내는 정수 targetValue

프로그램은 다음을 수행해야 합니다:

  1. std::map<std::string, int>와 정수를 매개변수로 받는 findKeysWithValue라는 이름의 함수를 생성합니다.
  2. 이 함수는 지정된 값을 가진 모든 키를 포함하는 std::vector<std::string>를 반환해야 합니다.
  3. 메인 함수에서 맵을 생성하고 입력받은 키-값 쌍으로 맵을 채웁니다.
  4. 맵과 대상 값을 사용하여 findKeysWithValue 함수를 호출합니다.
  5. 먼저 일치하는 키의 개수를 출력한 다음, 일치하는 각 키를 별도의 줄에 출력합니다.

다음과 같은 정확한 출력 형식을 사용하세요:

첫 번째 줄 - 일치하는 키의 개수:

Keys found: [number_of_matching_keys]

그 다음 각 일치하는 키를 별도의 줄에 출력:

[matching_key_1]
[matching_key_2]
...

대상 값을 가진 키가 없는 경우, 다음만 출력합니다:

Keys found: 0

findKeysWithValue 함수는 새로운 빈 벡터를 생성하고, 범위 기반 for 루프를 사용하여 맵을 순회하며, if 문을 사용하여 각 쌍의 값을 대상 값과 비교해야 함을 기억하세요. 일치하는 항목을 찾으면 push_back()을 사용하여 결과 벡터에 키(pair.first를 통해 접근)를 추가합니다. 함수는 모든 일치하는 키를 포함하는 벡터를 반환해야 합니다.

직접 해보기

#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;

// TODO: 여기에 findKeysWithValue 함수를 작성하세요

int main() {
    // 키-값 쌍의 개수를 읽습니다
    int n;
    cin >> n;
    
    // 키-값 쌍을 저장할 맵을 생성합니다
    map<string, int> keyValueMap;
    
    // n개의 키-값 쌍을 읽습니다
    for (int i = 0; i < n; i++) {
        string key;
        int value;
        cin >> key >> value;
        keyValueMap[key] = value;
    }
    
    // 검색할 대상 값을 읽습니다
    int targetValue;
    cin >> targetValue;
    
    // TODO: findKeysWithValue 함수를 호출하고 결과를 저장하세요
    
    // TODO: 요구된 형식으로 결과를 출력하세요
    // 먼저 "Keys found: [count]"를 출력합니다
    // 그 다음 일치하는 각 키를 별도의 줄에 출력합니다
    
    return 0;
}

로직과 흐름의 모든 레슨