https://school.programmers.co.kr/learn/courses/30/lessons/17680?language=cpp#
์บ์
์ง๋๊ฐ๋ฐํ์์ ๊ทผ๋ฌดํ๋ ์ ์ด์ง๋ ์ง๋์์ ๋์ ์ด๋ฆ์ ๊ฒ์ํ๋ฉด ํด๋น ๋์์ ๊ด๋ จ๋ ๋ง์ง ๊ฒ์๋ฌผ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ค.
์ด ํ๋ก๊ทธ๋จ์ ํ
์คํ
์
๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ ์ดํผ์น๋ ์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ ๊ฐ ๋ก์ง์ ๋ํ ์ฑ๋ฅ ์ธก์ ์ ์ํํ์๋๋ฐ, ์ ์ด์ง๊ฐ ์์ฑํ ๋ถ๋ถ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ์คํ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ดํผ์น๋ ์ ์ด์ง์๊ฒ ํด๋น ๋ก์ง์ ๊ฐ์ ํ๋ผ๊ณ ๋ฆ๋ฌํ๊ธฐ ์์ํ์๊ณ , ์ ์ด์ง๋ DB ์บ์๋ฅผ ์ ์ฉํ์ฌ ์ฑ๋ฅ ๊ฐ์ ์ ์๋ํ๊ณ ์์ง๋ง ์บ์ ํฌ๊ธฐ๋ฅผ ์ผ๋ง๋ก ํด์ผ ํจ์จ์ ์ธ์ง ๋ชฐ๋ผ ๋๊ฐํ ์ํฉ์ด๋ค.
์ดํผ์น์๊ฒ ์๋ฌ๋ฆฌ๋ ์ ์ด์ง๋ฅผ ๋์, DB ์บ์๋ฅผ ์ ์ฉํ ๋ ์บ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์คํ์๊ฐ ์ธก์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ ํ์
- ์บ์ ํฌ๊ธฐ(cacheSize)์ ๋์์ด๋ฆ ๋ฐฐ์ด(cities)์ ์ ๋ ฅ๋ฐ๋๋ค.
- cacheSize๋ ์ ์์ด๋ฉฐ, ๋ฒ์๋ 0 โฆ cacheSize โฆ 30 ์ด๋ค.
- cities๋ ๋์ ์ด๋ฆ์ผ๋ก ์ด๋ค์ง ๋ฌธ์์ด ๋ฐฐ์ด๋ก, ์ต๋ ๋์ ์๋ 100,000๊ฐ์ด๋ค.
- ๊ฐ ๋์ ์ด๋ฆ์ ๊ณต๋ฐฑ, ์ซ์, ํน์๋ฌธ์ ๋ฑ์ด ์๋ ์๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋์๋ฌธ์ ๊ตฌ๋ถ์ ํ์ง ์๋๋ค. ๋์ ์ด๋ฆ์ ์ต๋ 20์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ ํ์
- ์ ๋ ฅ๋ ๋์์ด๋ฆ ๋ฐฐ์ด์ ์์๋๋ก ์ฒ๋ฆฌํ ๋, "์ด ์คํ์๊ฐ"์ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด
- ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ LRU(Least Recently Used)๋ฅผ ์ฌ์ฉํ๋ค.
- cache hit์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 1์ด๋ค.
- cache miss์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 5์ด๋ค.
ํ์ด
์กฐ๊ฑด์ ์ฃผ์ด์ง ์บ์๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ LRU ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ง์์ด ์์ด์ผํ๋ ๋ฌธ์ ์๋ค. ๋๋ฌดํด ;(
https://github.com/seondal/Daily_CS/issues/9
#include <string>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
deque<string> cache;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
if(cacheSize == 0) return answer = 5*cities.size();
for(string input : cities) {
transform(input.begin(), input.end(), input.begin(), ::tolower);
auto number = find(cache.begin(), cache.end(), input);
if(number != cache.end()) {
// Hit
cache.erase(number);
answer++;
} else {
// Miss
if(cache.size() == cacheSize)
cache.pop_front();
answer += 5;
}
cache.push_back(input);
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/17680/solution_groups?language=cpp&type=my
์ํ์ฐฉ์ค
์ฒ์์๋ ์บ์ํฌ๊ธฐ 0์ธ๊ฒฝ์ฐ๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํ์ง ์์๋๋ฐ,
๊ทธ๋ฌ๋๋ ํ ์คํธ7๊ณผ ํ ์คํธ17์์ ์คํจ(signal: segmentation fault (core dumped)) ๊ฐ ๋ด๋ค
ํ ์คํธ 6์์ ์บ์ํฌ๊ธฐ๊ฐ 0์์๋ ๋ต์ ์ ๋์๋๋ฐ.. ์ด์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.. ใ
https://school.programmers.co.kr/questions/19566
๋์ฒ๋ผ 7๋ฒ 17๋ฒ๋ง ํ๋ฆฌ๋ ๊ฒฝ์ฐ์ ํด๊ฒฐ์ฑ ์ด ์๋๋ฐ..
๋ณธ ๊ธ์ ๋ฐ๋ก ํ ์ผ๋ ์ ํต๊ณผํ๊ณ ์ ์ถ๋งํ๋ฉด ํ๋ฆฌ๋..์ํฉ..ใ ใ
#include <string>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
deque<string> cache;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
for(string input : cities) {
transform(input.begin(), input.end(), input.begin(), ::tolower);
auto number = find(cache.begin(), cache.end(), input);
if(number != cache.end()) {
// Hit
cache.erase(number);
answer++;
} else {
// Miss
if(cache.size() == cacheSize)
cache.pop_front();
answer += 5;
}
cache.push_back(input);
}
return answer;
}
'๐ฆ Chango > ๐งฉ Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ๋ก ํ ๊ตฌํํ๊ธฐ (0) | 2022.09.04 |
---|