Лучшие решения для задач Microsoft на собеседовании. День недели на K дней позже.

Описание:



Решение:

По описанию мы имеем в качестве входных параметров: строку с названием дня недели и расстояние в днях до другого дня недели. Нам нужно найти название второго дня недели и вернуть строку с его названием. Для решения этой задачи было бы хорошо преобразовать заданный день недели из строки в число дней. Давайте посчитаем дни от 0. То есть воскресенье - 0, понедельник - 1… суббота - 6.

Тогда у нас есть расстояние между двумя днями недели в днях. И нам нужно узнать, какой день недели последний день на этой дистанции. Или, другими словами, номер дня внутри недели.

Каждая неделя содержит 7 дней, поэтому, чтобы найти число дней недели, нам нужно преобразовать расстояние между этими днями из дней в недели. Расстояние в неделях легко вычислить, если у нас есть целое число недель между заданными днями. Например, если у нас S = «Солнце» и K = 7, день недели из 7 дней тоже будет «Солнцем». Но если расстояние не делится полностью, мы можем использовать остаток после деления на 7, чтобы найти число дней в неделе. Например, пусть S = «Вт» и K = 10. Вторник - 2 дня недели. Мы должны прибавить к 10 к 2. 10 + 2 = 12 и разделить 12 на 7. Получаем остаток = 5.

Таким образом, день недели последнего дня - пятница, потому что 5-й день недели - пятница, а между вторником на этой неделе и пятницей на следующей неделе проходит 10 дней.

Код C ++:

string solution(const string &day, int k) {
    vector<string> days = {"Sun", "Mon", "Tue", "Wed", 
                           "Thu", "Fri", "Sat"};
    unordered_map<string, int> week_map = {{"Sun", 0},
                                           {"Mon", 1},
                                           {"Tue", 2},
                                           {"Wed", 3},
                                           {"Thu", 4},
                                           {"Fri", 5},
                                           {"Sat", 6}};
    return days[(week_map[day] + k) % 7];
}

Репозиторий с полной версией проекта вы можете найти здесь: https://github.com/jolly-fellow/microsoft/tree/master/day_of_week

Вернуться к оглавлению.