Level 1. 대충 만든 자판 어려운 문제는 아니었다. keymap에서 가장 작은 위치를 찾으면 된다. #include #include using namespace std; vector solution(vector keymap, vector targets) { size_t size = targets.size(); vector answer(size, 0); for (int i = 0; i < size; ++i) { for (char c : targets[i]) { int pos = -1; for (string key : keymap) { int p = key.find(c); pos = (p == -1) ? pos : (pos == -1) ? p : min(p, pos); } if (pos == -1) {..
Level 1. 실패율 stages 벡터를 정렬하거나 count_if() 함수를 이용할 수도 있지만 나는 각 스테이지별 도달한 사람 수를 미리 계산하여 사용했다. 1 ~ N을 갖는 인덱스 배열을 만들고 실제 정렬은 reached_users 벡터에 인덱스를 전달해 수행할 수 있다. stable_sort() 함수를 사용하면 같은 순위를 갖는 원소의 순서를 유지할 수 있다. #include #include #include using namespace std; // i+1번째 스테이지에 도달한 사람 = i번째 스테이지를 클리어한 사람 // (i번째 스테이지에 도달한 사람 - i번째 스테이지를 클리어한 사람) / i번째 스테이지에 도달한 사람 // i번째 스테이지에 있는 사람 / i번째 스테이지에 도달한 사람 f..
Level 1. 카드 뭉치 첫 번째 뭉치에서 단어를 발견할 경우 첫 번째 인덱스를 증가시키고, 두 번째 뭉치에서 발견할 경우 두 번째 인덱스를 증가시키며 마지막까지 확인하면 된다. 두 인덱스가 범위를 넘어가는 경우만 주의해주면 된다. #include #include using namespace std; string solution(vector cards1, vector cards2, vector goal) { int i = 0, j = 0; size_t nGoal = goal.size(); size_t nCards1 = cards1.size(), nCards2 = cards2.size(); while (i + j < nGoal) if (i < nCards1 && cards1[i] == goal[i + j..
Level 1. 옹알이 (2) 정규 표현식을 이용하여 해결했다. 각 단어를 숫자 하나로 교체한다. 교체된 숫자가 없으면 발음이 불가능한 단어다. 남은 알파벳을 제거한다. 제거된 알파벳이 있으면 발음이 불가능한 단어다. 연속된 숫자를 제거한다. 연속된 숫자가 있으면 발음이 불가능한 단어다. #include #include #include #include #include using namespace std; int solution(vector babbling) { int answer = 0; unordered_map words{{"aya", "0"}, {"ye", "1"}, {"woo", "2"}, {"ma", "3"}}; for (string s : babbling) { size_t length = s.l..
Level 1. 명예의 전당 (1) 매순간 최저점을 뽑기 위해 Min Heap을 유지하는 우선순위 큐를 사용해 해결했다. 우선순위 큐에 기본값인 vector 컨테이너를 사용하면 pop()할 때마다 O(k) 만큼의 시간이 소요된다. 이 문제는 매번 pop()을 해야 하므로 맨 앞 원소의 삭제도 O(1)에 처리하는 deque을 사용했다. #include #include #include #include using namespace std; vector solution(int k, vector score) { size_t size = score.size(); vector answer(size); priority_queue prque; for (int i = 0; i < size; ++i) { if (prque...
Level 1. 완주하지 못한 선수 중복 키를 저장할 수 있고 정렬을 유지하지 않는 unordered_multiset을 이용해 해결했다. 완주한 참가자를 모두 제거한 후 마지막 남은 참가자가 완주에 실패한 참가자이다. #include #include #include using namespace std; string solution(vector participant, vector completion) { unordered_multiset umset(participant.begin(), participant.end()); for (string& s : completion) umset.erase(umset.find(s)); return *umset.begin(); } 정렬하여 다른 이름이 나올 때까지 비교하는..