기록

99클럽 코테 스터디 5일차 TIL C++ map : insert, 순회 본문

코딩테스트/cpp

99클럽 코테 스터디 5일차 TIL C++ map : insert, 순회

youngyin 2024. 11. 2. 23:06

오늘의 학습 키워드

(1) 문제1 : map

https://www.acmicpc.net/problem/27160

 

(2) 문제2 : map

https://www.acmicpc.net/problem/29701

 

공부한 내용 본인의 언어로 정리하기

문제1 : 문자열

 

(1) map.insert

map은 키-값 쌍을 저장할 수 있는 자료구조로, 여기서는 과일 이름을 키로, 수량을 값으로 사용하고 있습니다.
insert 메서드를 사용하여 초기 과일 이름과 그 수량을 0으로 설정합니다. 예를 들어:

mapFruit.insert({"STRAWBERRY", 0});

또한 C++에서 제공하는 make_pair 함수를 사용할 수 있습니다.

#include <utility>

mapFruit.insert(pair<string, int>("STRAWBERRY", 0));

 

(2) map 순회
map을 순회할 때는 반복자를 사용하여 begin()에서 end()까지 순회합니다.
각 요소에 접근하기 위해 반복자 it를 사용하고, it->first로 키(과일 이름)에 접근하며, mapFruit[strKey]로 해당 키의 값을 확인할 수 있습니다.

for (auto it = mapFruit.begin(); it != mapFruit.end(); ++it) {
    string strKey = it->first;
    int cnt = mapFruit[strKey];
}

 

(3) 전체 풀이

#include <iostream>
#include <map>

using namespace std;
static map<string, int> mapFruit;

int main(int argc, char* argv[]) {
    // init map
    mapFruit.insert({"STRAWBERRY", 0});
    mapFruit.insert({"BANANA", 0});
    mapFruit.insert({"LIME", 0});
    mapFruit.insert({"PLUM", 0});

    //input
    int N, X;
    string name;
    cin >> N;
    while (N-->0){
        cin >> name >> X;
        mapFruit[name]+=X;
    }

    // cnt == 5
    for (auto it = mapFruit.begin(); it != mapFruit.end(); ++it){
        string strKey = it->first;
        int cnt = mapFruit[strKey];
        if (cnt == 5) {
            cout << "YES" << endl;
            return 0;
        }
    }

    cout << "NO" << endl;

    return 0;
}
문제2 : map

 

(1) 전체 풀이

#include <iostream>
#include <map>
#include <utility>

using namespace std;

static map<string, char> m_map;

void initMap(){
    // A-Z
    m_map.insert(pair<string, char>(".-", 'A'));
    m_map.insert(pair<string, char>("-...", 'B'));
    m_map.insert(pair<string, char>("-.-.", 'C'));
    m_map.insert(pair<string, char>("-..", 'D'));
    m_map.insert(pair<string, char>(".", 'E'));
    m_map.insert(pair<string, char>("..-.", 'F'));
    m_map.insert(pair<string, char>("--.", 'G'));
    m_map.insert(pair<string, char>("....", 'H'));
    m_map.insert(pair<string, char>("..", 'I'));
    m_map.insert(pair<string, char>(".---", 'J'));
    m_map.insert(pair<string, char>("-.-", 'K'));
    m_map.insert(pair<string, char>(".-..", 'L'));
    m_map.insert(pair<string, char>("--", 'M'));
    m_map.insert(pair<string, char>("-.", 'N'));
    m_map.insert(pair<string, char>("---", 'O'));
    m_map.insert(pair<string, char>(".--.", 'P'));
    m_map.insert(pair<string, char>("--.-", 'Q'));
    m_map.insert(pair<string, char>(".-.", 'R'));
    m_map.insert(pair<string, char>("...", 'S'));
    m_map.insert(pair<string, char>("-", 'T'));
    m_map.insert(pair<string, char>("..-", 'U'));
    m_map.insert(pair<string, char>("...-", 'V'));
    m_map.insert(pair<string, char>(".--", 'W'));
    m_map.insert(pair<string, char>("-..-", 'X'));
    m_map.insert(pair<string, char>("-.--", 'Y'));
    m_map.insert(pair<string, char>("--..", 'Z'));

    // 0-9
    m_map.insert(pair<string, char>("-----", '0'));
    m_map.insert(pair<string, char>(".----", '1'));
    m_map.insert(pair<string, char>("..---", '2'));
    m_map.insert(pair<string, char>("...--", '3'));
    m_map.insert(pair<string, char>("....-", '4'));
    m_map.insert(pair<string, char>(".....", '5'));
    m_map.insert(pair<string, char>("-....", '6'));
    m_map.insert(pair<string, char>("--...", '7'));
    m_map.insert(pair<string, char>("---..", '8'));
    m_map.insert(pair<string, char>("----.", '9'));

    // 특수 기호
    m_map.insert(pair<string, char>("--..--", ',')); // ,
    m_map.insert(pair<string, char>(".-.-.-", '.')); // .
    m_map.insert(pair<string, char>("..--..", '?')); // ?
	m_map.insert(pair<string, char>("---...", ':')); // :
    m_map.insert(pair<string, char>("-....-", '-')); // -
    m_map.insert(pair<string, char>(".--.-.", '@')); // @
}

int main()
{   
	// init data
	initMap();
	
    int N;
	string strMos, strResult;
	cin >> N;
	
	// convert
	while (N-->0){
		cin >> strMos;
		strResult = m_map[strMos];
		cout << strResult;
	}
	
	cout << endl;
	
    return 0;
}

오늘의 회고

다음은 dfs, bfs 기본적인 알고리즘을 연습해보겠습니다.

 
Comments