π Problem Solving/C++
[νλ‘κ·Έλλ¨Έμ€][C++] μ€ν¬νΈλ¦¬
0=2.
2024. 5. 31. 20:52
λ¬Έμ
https://school.programmers.co.kr/learn/courses/30/lessons/49993
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
νμ΄
1οΈβ£ queue
1. μνλ²³ κ°μ(26) ν¬κΈ°μ λ°°μ΄λ‘ μμμ μκ΄μλ μ€ν¬(true)κ³Ό μ ν μ€ν¬μ΄ νμν μ€ν¬(false)μ νμνλ€.
2. μ€ν¬μ μμ λΉκ΅λ₯Ό μν΄ νλ₯Ό μμ±νμ¬ skill κ°μ ν λΉνλ€.
3. skill_trees λ΄μ λ¬Έμμ΄ νμ
(1) μ ν μ€ν¬μ΄ νμμλ μ€ν¬μ 무μνλ€.
(2) μ ν μ€ν¬μ΄ νμν μ€ν¬μΌ κ²½μ°, νλ₯Ό μ΄μ©ν΄ μμκ° κ°μμ§ νμΈνλ€. (queue.front()μ λΉκ΅)
- μμκ° κ°μΌλ©΄ νμμ ν΄λΉ λ¬Έμλ₯Ό μ κ±°νλ€.
- μμκ° λ€λ₯΄λ©΄ answer - 1 ν ν, λ€μ λ¬Έμμ΄μ νμνλ€.
π¨ skill_treesμ λ¬Έμμ΄μ νμν λλ§λ€ νλ₯Ό μ΄κΈ°νν΄μΌ νλ€.
2οΈβ£ string::find()
1. skill_trees λ΄μ λ¬Έμμ΄μ νμνλ©΄μ skillκ³Ό κ°μ λ¬Έμκ° μλμ§ stringμ find ν¨μλ₯Ό μ΄μ©ν΄ μ°Ύλλ€.
κ°μ λ¬Έμκ° μμΌλ©΄ μ΄λ₯Ό string sμ μ μ₯νλ€.
2. sμ skillμ μμλ₯Ό λΉκ΅νλ€.
μμκ° λ€λ₯΄λ©΄ answer - 1 ν ν, λ€μ λ¬Έμμ΄μ νμνλ€.
π¨ skill_treesμ λ¬Έμμ΄μ νμν λλ§λ€ κ°μ κ°μ μ μ₯νλ string sλ₯Ό μ΄κΈ°νν΄μΌ νλ€.
π¨ μμλ₯Ό λΉκ΅ν λ skillμ΄ μλ sμ κΈΈμ΄λ§νΌ λΉκ΅ν΄μΌ νλ€. μ ν μ€ν¬ λ΄μ λͺ¨λ μ€ν¬μ λ°°μ°μ§ μμμ΄λ, μμλ₯Ό λ°λ₯΄λ©΄ 쑰건μ λ§μ‘±νκΈ° λλ¬Έμ΄λ€.
μ½λ
1οΈβ£ queue
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = skill_trees.size();
vector<bool> alphabet(26, true); // μμμ μκ΄μλ μ€ν¬ μ μ₯
for (char c: skill) {
alphabet[c - 'A'] = false; // μ ν μ€ν¬ νμν μ€ν¬: false
}
for (string skill_tree: skill_trees) {
queue<char> skill_queue; // μ ν μ€ν¬
for (char c: skill) { // μ ν μ€ν¬ μ½μ
skill_queue.push(c);
}
for (char c: skill_tree) {
if (alphabet[c - 'A']) { // μ ν μ€ν¬ νμ μμ
continue;
} else if (c == skill_queue.front()) { // μ ν μ€ν¬ 쑰건 λ§μ‘±
skill_queue.pop();
} else { // μ ν μ€ν¬ 쑰건 λΆλ§μ‘±
answer--;
break;
}
}
}
return answer;
}
2οΈβ£ string::find()
#include <iostream>
#include <vector>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = skill_trees.size();
string s = "";
for(string skill_tree: skill_trees){
for(char c: skill_tree){
// skillμ skill_treeμ κ°μ κ°μ΄ μμΌλ©΄ μ μ₯
if(skill.find(c) != string::npos){
s.push_back(c);
}
}
for(int i = 0; i < s.length(); i++){
if(skill[i] != s[i]){ // μμκ° λ€λ₯΄λ©΄ λΆκ°λ₯ν μ€ν¬νΈλ¦¬
answer--;
break;
}
}
s = ""; // μ΄κΈ°ν
}
return answer;
}