inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

4주차는 개념강의만 들어도 괜찮을까요?

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

오랜시간 고민하다 강의를 보면서 힌트를 받아 4-A를 풀었습니다. 허나 정말 빠르게 취준을 목표로 삼고있다면 비트마스킹은 스킵해도 될까요? 선택과 집중을 하고싶습니다,, 물론 다 알아가면 좋지만 bfs나 dfs나 dp같은 문제들을 더 풀어보는게 좋을지 비트마스킹은 간단하게 알고 지나가도 괜찮은지 궁금합니다.. 항상 좋은 강의 감사합니다.

  • c++
  • 코딩-테스트
김형준 댓글 2 좋아요 0 조회수 346

2-R 무엇이 잘못되었을까요?

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

예제는 다 통과하는데 제출하면 틀렸다고 나오네요.. bfs를 통해 풀었는데 뭐가 문제인지 잘 모르겠습니다. /****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <iostream> #include <vector> #include <queue> std::vector<int> tree[50]; void bfs(const int start, const int removeNumber) { bool visited[50] = {false, }; std::queue<int> que; que.push(start); visited[start] = true; int curr = 0; int count = 0; while(que.empty() == false) { curr = que.front(); que.pop(); for (int i = 0; i < tree[curr].size(); ++i) { if (!visited[tree[curr][i]] && tree[curr][i] != removeNumber) { if (tree[tree[curr][i]].size() == 0) { count += 1; continue; } que.push(tree[curr][i]); visited[tree[curr][i]] = true; } } } std::cout << count << "\n"; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int N, temp, removeNumber; std::cin >> N; for(int i = 0; i < N; ++i) { std::cin >> temp; if (temp == -1) { continue; } tree[temp].push_back(i); } std::cin >> removeNumber; if (removeNumber == 0) { std::cout << 0 << "\n"; return 0; } bfs(0, removeNumber); return 0; }

  • c++
  • 코딩-테스트
HELLO 댓글 2 좋아요 0 조회수 240

2-Q 시간초과

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 선생님 강의 잘 보고 있습니다. 알맞게 구현한 거 같은데 시간초과가 나는데 이게 잘못되게 구현한 건지 궁금합니다.. /****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ #include <iostream> #include <queue> int map[100][100] = {0, }; int result = 0; int result2 = 0; void bfs(const int H, const int W, const int x, const int y) { std::queue<std::pair<int, int>> que; que.push({x, y}); bool visited[H][W]; std::fill(&visited[0][0], &visited[H][W], false); visited[y][x] = true; int moveX[4] = {0, 0, -1, 1}; int moveY[4] = {1, -1, 0, 0}; int newX, newY; int currX, currY; int cnt = 0; while(!que.empty()) { currX = que.front().first; currY = que.front().second; que.pop(); for(int i = 0; i < 4; ++i) { newX = currX + moveX[i]; newY = currY + moveY[i]; if (!visited[newY][newX] && newX >= 0 && newX < W && newY >= 0 && newY < H && map[currY][currX] == 0) { visited[newY][newX] = true; if (map[newY][newX] == 1) { map[newY][newX] = 0; cnt += 1; } else { que.push({newX, newY}); } } } } result += 1; result2 = cnt; } bool isMapZero(const int H, const int W) { for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { if (map[i][j] != 0) { return false; } } } return true; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int H, W; std::cin >> H >> W; for(int i = 0; i < H; ++i) { for(int j = 0; j < W; ++j) { std::cin >> map[i][j]; } } bool flag = false; while(!flag) { flag = isMapZero(H, W); if (flag) { std::cout << result << "\n"; std::cout << result2 << "\n"; break; } bfs(H, W, 0, 0); } return 0; }

  • c++
  • 코딩-테스트
HELLO 댓글 3 좋아요 0 조회수 235

2-I에서 커스텀 사용함수 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요. 2-I문제를 풀다가 희한한걸 봐서 질문드립니다.. bool comp1(string a, string b) { if(a.size() == b.size()) { for(int i = 0; i < a.size(); i++) { if(a[i] < b[i]) return true; } } return a.size() < b.size(); } bool comp2(string a, string b) { if(a.size() == b.size()) { return a < b; } return a.size() < b.size(); } 위의 comp1, comp2 함수를 sort()의 인자로 넣었을 때 ccomp1을 넣으면 맞왜틀이, comp2를 넣으면 맞았다고 뜹니다. 제가 생각했을 때 동작이 비슷하고 반례가 없어보이는데, 어떤 반례가 있길래 comp1, comp2의 채점 결과가 다르게 뜨는 걸까요?

  • c++
  • 코딩-테스트
km 댓글 2 좋아요 0 조회수 125

순수가상함수

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

virtual void PrintInfo()=0; 순수가상함수-파생클래스에서 반드시 구현해야하는 .. 자신은 아무 구현없이 선언만 하는... 인터페이스인가요?

  • c++
eunjeong seo 댓글 1 좋아요 0 조회수 162

명시적 복사생성 또는 복사대입연산에서

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

기사(부모,자식을 가진 중간클래스)만 의도적으로 생성하거나,안만드는 이유가 있을까요? 왜냐면,펫(자식)도 플레이어(부모)도 계속 '명시적' 복사생성자,복사대입연산자함수를 갖고있어서, 그리고, 없는 결과를 보면,결과가 기본생성자로 출력되서,.. 질문합니다. 만약, 실제로 설계중이라면, 일단 모든클래스에 (누가 누구를 소유할지 바뀔수도 있으니까) 명시적용도의 복사생성자,복사할당연산자함수를 다 넣고, 소유한 클래스는 다 포인터로 하고(단순히 일관적인 소유일경우만 암시적생성을 사용하고).. 작업하는게 효율적일까요?

  • c++
eunjeong seo 댓글 1 좋아요 0 조회수 189

2-O 질문있습니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/af87db56b1254e1baa345487841bc5a5 1. (와[ 입력시 스택에 넣기 2.) 입력시 맨위가 (아니라면 오류 또는 비어있다면 오류 3. ]시 똑같이 오류 다끝냈는데 스택 안비면 오류 라는 논리로 문제를 풀었습니다. 하지만 특정경우에 yes와 no가 같이 나와서 틀렸다고 하는거 같습니다 f만 변화시킨후 마지막에 한꺼번에 출력하면 맞았다고 하더라고요 어떤경우에 yes와 no가 같이 나오는지 알수있을까요

  • c++
  • 코딩-테스트
김현우 댓글 2 좋아요 0 조회수 113

5-B 코드질문있습니다.

해결됨

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님. 큰돌님께서 다른 수강생의 질문에 답하신 내용에 대해 질문드리고 싶습니다. while(true){ if(!s.size()){cout << "FRULA" << '\n'; return 0;} int flag = s.find(a); if(flag != string::npos){ s.erase(flag, a.size()); } else break; } 큰돌님께선 문자열 S의 길이가 100만이고, 문자열 A의 길이가 1일 때, 해당 코드의 시간복잡도는 100만!이라고 하셨습니다. erase와 find의 시간복잡도는 O(N)으로 알고 있습니다. 첫번째 턴 최대 O(100만) FIND + O(100만) ERASE, 두번째 턴 최대 O(99만) FIND + O(99만) ERASE, . . . 이런식이면 O(N^2)이지 않나요? 어떻게 100만!이 시간복잡도가 되는지 궁금합니다. 그리고 FIND의 시간복잡도가 O(N)인게 잘 이해가 안됩니다. 그런데, 실제로는 O(N*M)이지 않나요? N은 찾아야 하는 문자열이 속한 문자열의 길이, M은 찾아야 하는 문자열의 길이. 어떻게 O(N)이 되는지 궁금합니다.

  • c++
  • 코딩-테스트
lego0313 댓글 2 좋아요 0 조회수 139

C++ 숙련자의 기준이 뭘까요?

해결됨

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

안녕하세요 루키스님. 현재 저는 C++강의 완강하고 현재는 자료구조&알고리즘이랑 서버 쪽 강의 거의 다 끝나가는 상황입니다. 강의를 들으면서 게임 서버 개발자 직군 쪽 채용 공고글들을 한번씩 보고 있는데요. 간혹 (신입/경력) 무관 쪽 채용 공고를 보면 지원자격이나 우대사항으로 "C++ 숙련자", "~에 능숙하신 분", "~에 이해가 있으신 분" 같이 기재해 놓은 글들을 보면 이게 어느 정도의 수준을 말하는 건지 궁금하더라구요. (신입/경력) 무관인 채용 공고의 지원자격 혹은 우대사항이 C++ 숙련자라고 했을 때 신입과 경력자의 C++에 대한 숙련도를 같은 수준으로 평가하는지도 궁금하고 평가 기준이 어느 정도를 말하는 것일지도 궁금합니다. 회사마다 다를 수도 있을 거 같긴 한데 보통 어떤가요?

  • c++
100end 댓글 2 좋아요 0 조회수 587

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

안녕하세요 문제를 풀다가 제 코드에서 어느 부분이 틀린 건지 도무지 모르겠어서 글을 쓰게 되었습니다.. 혹시 괜찮으시다면 제 코드 상에서 논리적인 오류가 있는지 확인해주실 수 있으신가요? 테스트케이스 4번만 만족을 못시키고 있습니다.. 감사합니다. #include <iostream> #include <stdio.h> #include <string> #include <fstream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int main() { ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; vector<int> table(n); int sum = 0; for (int i = 0; i < n; i++) { cin >> table[i]; sum += table[i]; } int lt = 1, rt = sum, mid = 0; int last = 1001; while (lt <= rt) { mid = (lt + rt) / 2; int cnt = 1; int sum = 0; for (int i = 0; i < n; i++) { if (sum + table[i] > mid) { cnt++; sum = table[i]; } else if (sum + table[i] == mid) { cnt++; sum = 0; } else sum += table[i]; } if (sum == 0) cnt--; if (cnt == m) { if (last > m) { last = m; rt = mid - 1; } else break; } else if (cnt < m) rt = mid - 1; else lt = mid + 1; } cout << mid << "\n"; return 0; }

  • c++
  • 코딩-테스트
youch1127 댓글 1 좋아요 0 조회수 186

2-T 질문있습니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! http://boj.kr/6d0c1282d12442349667aa6073a52826 해당 문제 질문 있습니다. 인덱스 1번부터 n번까지 번호를 저장하고 인덱스 1번과 다음인덱스들을 비교하면서 큰 수를 찾으면 출력하고 break를 이용해 다음 인덱스 2번으로 이동하며 인덱스를 이동했습니다. 또한 cnt를 이용해 큰 수가 없는 경우 -1을 출력하게 만들었습니다. 예시로 입력된 입력들은 잘 출력이 되는데 어느 부분이 문제인지 잘 모르겠습니다!

  • c++
  • 코딩-테스트
최문규 댓글 2 좋아요 0 조회수 122

41. 연속된 자연수의 합 문제 질문있습니다.

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

안녕하세요 오늘도 강의 잘 시청하고 있습니다. 좋은 강의 항상 감사드립니다. 다름이 아니라 이 문제를 수학적으로 접근하는 방법을 도무지 모르겠어서 일단 처음 풀 때는 수학에 연연하지 않고 스택을 이용해서 문제를 해결했는데 이렇게 풀어도 괜찮은 방식인지 궁금해져서 질문 드리려고 합니다. 채점 돌려봤을 땐 다 정답으로 뜨는데 혹시 제 코드에 논리적인 오류가 있을까요? #include <iostream> #include <stdio.h> #include <string> #include <fstream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; int main() { ios_base::sync_with_stdio(false); int n; cin >> n; stack<int> table; for (int i = 1; i <= n / 2; i++) { int start = i; int sum = start; for (int j = i + 1; j <= (n / 2) + 1; j++) { sum += j; if (sum == n) { table.push(i); break; } else if (sum > n) break; } } int cnt = table.size(); while (!table.empty()) { int start = table.top(); int sum = start; cout << start; while (sum != n) { start++; sum += start; cout << " + " << start; } cout << " = " << n << "\n"; table.pop(); } cout << cnt << "\n"; return 0; } 그리고 제가 문제를 풀면서 느낀 건데 제가 수학적인 사고력이 한참이나 부족하다는 것입니다. 강의를 끝까지 시청하면서 강사님 풀이 방식을 익히다 보면 저도 수학적인 사고력이 늘 수 있을까요? 지금까지는 수학 관련된 문제만 나오면 어떻게 해야 할지 도무지 갈피를 못 잡은 적이 많아서요. 아, 그런 의미에서 이번 강의는 커뮤니티에 달아주신 내용이 정말 큰 도움이 되었습니다. 정말 감사합니다. 앞으로도 열심히 공부하겠습니다.

  • c++
  • 코딩-테스트
youch1127 댓글 1 좋아요 0 조회수 176

2-I. 틀린 이유가 궁금합니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/ffdb3a2b0c96414ba111477f93c061b2 외부tc는 정상출력되지만 제출을 하면 틀립니다. 반례를 생각해봐도 도저히 떠오르지 않아 선생님께 여쭤봅니다. 틀린 이유가 뭘까요?

  • c++
  • 코딩-테스트
김경탁 댓글 2 좋아요 0 조회수 153

2-P 왜 예제에서 0이 나올까요..?

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

코드가 아래와 같은데 뭐가 잘못된 걸까요..?ㅜ #include <iostream> #include <string> #include <vector> #include <queue> int calcArea(const std::vector<std::vector<int>> &map) { int result = 0; for(int i = 0; i < map.size(); ++i) { for (int j = 0; j < map[i].size(); ++j) { if (map[i][j] == 0) result += 1; } } return result; } void bfs(std::vector<std::vector<int>> &map, std::vector<std::vector<bool>> &visited, const int yy, const int xx) { std::queue<std::pair<int, int>> que; visited[yy][xx] = true; que.push({yy, xx}); int y, x; int moveX[4] = {0, 0, -1, 1}; int moveY[4] = {1, -1, 0, 0}; while(!que.empty()) { y = que.front().first; x = que.front().second; que.pop(); for(int i = 0; i < 4; ++i) { int newX = x + moveX[i]; int newY = y + moveY[i]; if (newX >= 0 && newX < map[0].size() && newY >= 0 && newY < map.size() && !visited[newY][newX] && map[newY][newX] != 1) { que.push({newY, newX}); visited[newY][newX] = true; map[newY][newX] = 2; } } } } int solve(std::vector<std::vector<int>> map, const std::vector<std::pair<int, int>>& virusList) { std::vector<std::vector<bool>> visited(map.size()); std::vector<bool> temp(map[0].size()); temp.assign(temp.size(), false); visited.assign(visited.size(), temp); for(int i = 0; i < virusList.size(); ++i) { bfs(map, visited, virusList[i].first, virusList[i].second); } return calcArea(map); } int solution(std::vector<std::vector<int>> map, const std::vector<std::pair<int, int>>& wallList, const std::vector<std::pair<int, int>>& virusList) { int result = 0; for(int i = 0; i < wallList.size(); ++i) { for (int j = 0; j < i; ++j) { for (int k = 0; k < j; ++k) { map[wallList[i].first][wallList[i].second] = 1; map[wallList[j].first][wallList[j].second] = 1; map[wallList[k].first][wallList[k].second] = 1; result = std::max(result, solve(map, virusList)); map[wallList[i].first][wallList[i].second] = 0; map[wallList[j].first][wallList[j].second] = 0; map[wallList[k].first][wallList[k].second] = 0; } } } return result; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int N, M; std::cin >> N >> M; std::string str; std::vector<std::vector<int>> map; int temp; std::vector<std::pair<int, int>> wallList, virusList; for (int i = 0; i < N; ++i) { std::vector<int> tempVec; for(int j = 0; j < M; ++j) { std::cin >> temp; if (temp == 1) wallList.push_back({i, j}); else if (temp == 2) virusList.push_back({i, j}); tempVec.push_back(temp); } map.push_back(tempVec); } int result = 0; result = solution(map, wallList, virusList); std::cout << result << std::endl; return 0; }

  • c++
  • 코딩-테스트
HELLO 댓글 3 좋아요 0 조회수 236

헤더 파일이랑 다른 것이 무엇인지 모르겠어요...

미해결

홍정모의 따라하며 배우는 C++

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 잘 이해가 안가네요. 그냥 이름이 같은 함수를 쓰기 위해 존재하는 것인가요?

  • c++
강진성 댓글 1 좋아요 1 조회수 151

5-M 질문있습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/2b485a2e7fac41d9879fd3e685d8b70b 선생님 저는 이 문제를 보고 짝짓기와 유사하게 풀 수 있겠다는 생각해서 다음과 같이 문제를 풀었습니다. 근데 오답으로 처리가 되어서 어느 부분에서 잘못 생각한건지 판단이 잘 되지 않아서 이렇게 질문 올립니다. 감사합니다.

  • c++
  • 코딩-테스트
jjune0427 댓글 1 좋아요 0 조회수 147

2-i 질문입니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/2e757e26d0db4585afd7179a25022264 질문있습니다. 문자열을 입력받는다 각 문자열을 돌면서 숫자가 있다면 tmp에 넣는다. 숫자가 아닌 문자가 들어온다면 tmp를 숫자로 바꿔서 벡터에 넣어주고 tmp를 비운다. 로 만들었는데 틀렸다고 하네요 예제 같은경우는 정답으로 나오는데 왜 틀렸는지 모르겠습니다.

  • c++
  • 코딩-테스트
김현우 댓글 1 좋아요 0 조회수 104

2-I 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요! 2-I 맞왜틀이 나와서 질문드립니다... 일단 문제의 예제 입력은 다 맞게 나오던데요, 제가 짠 코드의 로직은: 입력받은 문자열을 문자 하나하나 앞에서부터 검사해서, 0~9까지의 숫자이면 string s에다가 저장해놓습니다. 즉 숫자를 저장합니다. 만약 0~9까지의 숫자가 아니면 문자가 등장했다는 뜻이므로 여태까지 s에 저장되었던 숫자열이 저장될 vector<string> nums에 push_back() 합니다. 그런 다음 공간채우기용 0을 제거하는 로직을 거치는데요. nums의 문자열들을 string num을 통해 가져와서 앞에서부터 하나하나 검사하는데 0을 만나게 되면 공간채우기용 0을 의미하므로(is_zero_prefix == true) 0이 아닐 때까지 다음 문자를 하나하나 검사하다가 0이 아닌 문자를 만나면 공간채우기용0 검사모드를 끝냅니다.(is_zero_prefix==false) 이런 로직들을 거쳐서 원하는 출력을 내보내는데요.. 분명 맞게 나오는데 어떤 반례가 있길래 맞왜틀이 나와버리네요 ㅠㅠ 어떤 부분이 잘못된걸까요..? http://boj.kr/a20edfc48ee4476d938520e7fe90a188

  • c++
  • 코딩-테스트
km 댓글 2 좋아요 0 조회수 188

visited 범위 질문 드립니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님! 항상 강의 잘 듣고있습니다 ~ 1:00에서 visited 의 범위를 20만 까지라고 말씀해주셨는데요 ! 최단시간에 동생에게 도달하려면 10만이 넘지 않아야 되는것 아닌가요? 수빈이의 위치 n이 10만을 넘기는 예시를 이것저것 찾아보았지만 찾을수 없었습니다. 동생의 위치가 99999 이고 수빈의 위치가 50001 이여도 100002 > 100001 > 100000 > 99999 보다는 50000 > 100000 > 99999 가 더 빠르기 때문입니다.

  • c++
  • 코딩-테스트
송준환 댓글 1 좋아요 0 조회수 158

가상함수를 포인터로 호출하는 방법

미해결

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

14:00부분에서 선생님이 절대로 해선안된다는 일반함수에서의 포인터 호출방식이 메인함수에서도 안될까요? ㅠㅠ 이렇게... int main() { Knight k1; Mage m1; //부모클래스의 포인터로 자식 가상함수 호출 Player* ptr; ptr = &k1; ptr->VPrintClass(); }

  • c++
eunjeong seo 댓글 1 좋아요 0 조회수 187

인기 태그

인프런 TOP Writers

주간 인기글