내일배움캠프 Unity 사전캠프 2일차 TIL - 알고리즘 공부

Wooooo·2023년 10월 27일
0

내일배움캠프Unity

목록 보기
2/94

오늘의 키워드

오늘은 프로그래머스 문제를 푸는 도중에 처음 써본 라이브러리 함수를 정리해보려고 한다.
c++string 클래스의 멤버함수 find()이다.

string::find()

string 내에서 매개변수로 넘어온 문자열을 포함하는지 검사하고, 포함한다면 찾는 문자열의 첫 인덱스를 반환한다. 그렇지 않다면 string 형의 쓰레기값인 string::npos를 반환한다.

프로그래머스 - 방금그곡 (Lv.2)

#include <vector>
#include <sstream>
#include <unordered_map>
#include <iostream>
using namespace std;

string convert(string sheet)
{
    unordered_map<string, char> dict = { {"C", 'a'}, {"C#", 'b'}, {"D", 'c'}, {"D#", 'd'}, {"E", 'e'}, {"F", 'f'}, {"F#", 'g'}, {"G", 'h'}, {"G#", 'i'}, {"A", 'j'}, {"A#", 'k'}, {"B", 'l'} };
    string res;
    for (int i = 0; i < sheet.size(); i++)
    {
        string s = "";
        s.push_back(sheet[i]);
        if (i + 1 < sheet.size())
        {
            if (sheet[i + 1] == '#')
            {
                s.push_back('#');
                i++;
            }
        }
        res.push_back(dict[s]);
    }
    return res;
}

string solution(string m, vector<string> musicinfos)
{
    string answer = "(None)";
    string m2 = convert(m);
    int maxTime = 0;

    for (auto e : musicinfos)
    {
        int time;
        string title;
        string tempSheet;
        istringstream ss(e);
        getline(ss, title, ',');
        time = -(stoi(title.substr(0, 2)) * 60 + stoi(title.substr(3, 2)));
        getline(ss, title, ',');
        time += stoi(title.substr(0, 2)) * 60 + stoi(title.substr(3, 2));
        getline(ss, title, ',');
        getline(ss, tempSheet, ',');

        string sheet = convert(tempSheet);

        int time2 = time - sheet.size() + 1;
        int idx = 0;
        int n = sheet.size();
        while (time2 > 0)
        {
            sheet.push_back(sheet[idx]);

            time2--;
            if (idx == n - 1)
                idx = 0;
            else
                idx++;
        }
        while (time2 < 0)
        {
            sheet.pop_back();
            time2++;
        }

        if (sheet.find(m2) != string::npos)
        {
            if (time > maxTime)
            {
                maxTime = time;
                answer = title;
            }
        }
    }

    return answer;
}
profile
game developer

0개의 댓글