일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- conversion constructor
- increment operator
- std::endl
- placement new
- suffix return type
- this call
- virtual destructor
- base from member
- member function pointer
- return by reference
- constructor
- c++ basic practice
- diamond inheritance
- virtual function table
- discord bot
- 더 지니어스 양면포커
- C++
- pointer to member data
- std::ostream
- dynamic_cast
- vector size
- c++ multi chatting room
- std::cout
- virtual inheritance
- std::vector
- delete function
- new&delete
- virtual function
- vector capacity
- operator overloading
- Today
- Total
목록Home (99)
I'm FanJae.
1. 주요 구현 로직 - 카드 비교 로직- CALL, RAISE 상황에 따른 처리2. Server 처리- 카드 비교 로직GameType Room_Manager::compareCard(const SOCKET socket, BetType bet_type){ BetType bet_type_info[2] = { BetType::NONE, BetType::NONE }; int user_card_info[2] = { 0 }; int vs_card_info[2] = { 0 }; for (auto& pair : users) { auto& user = pair.second; if (pair.first == getUserNumberFromSocket(socket)) { bet_type_info[0] = user..
1. 주요 구현 로직 (Server)- 게임 시작- 칩 정보 업데이트 및 기본 베팅 처리- 카드 배분- 베팅 처리2. Server 처리 (게임 시작 Event)2-1. 게임 시작if (roomManager->All_User_Start_Ready_State()){ send_message = GAME_CLIENT_EVENT + START + DONE; roomManager->broadcast_Message(send_message, socket, TargetType::ALL); gameInit(socket, InitType::INIT); send_message = GAME_CLIENT_EVENT + GAME_INIT; roomManager->broadcast_Message(send_message, socket..
1. 문제 링크https://www.acmicpc.net/problem/3015 2. 문제 접근- 왼쪽에서 오른쪽으로 볼 때, A와 B가 서로 볼 수 있으려면 A 또는 B보다 키가 큰 사람이 없어야 한다.- 2 4 1 2 2 5 1이면 다음과 같다.- (2,4) (4,1) (4,2) (4,2) (4,5) (1,2) (2,2) (2,5) (2,5) (5,1)- 어떤 수(왼쪽 수) 입장에서 자신보다 큰 수가 등장했다는 것은 해당 인원들은 더 이상 쌍을 만들 수 없다. - 그 수를 기준으로 모두 pop()한다. pop()한 개수 만큼 더해준다. (pop된 수와 쌍을 만들 수 있음.)- 오른쪽 수의 입장에서 왼쪽수가 자신보다 크다면, 적어도 왼쪽에 있는 수 중에는 쌍을 만들 수 있는건 1개다.- 같은 수일때는 ..
1. 주요 구현 로직 (Client)- 게임 시작- 칩 정보 업데이트 및 기본 베팅 처리- 카드 배분- 베팅 처리2. Client 처리 (게임 시작 Event)2-1. 게임 시작 private void ChattingRoom_Form_KeyDown(object sender, KeyEventArgs e) { if (this.isGamePlaying == false && IsSocketConnected(socket)) { if (e.KeyCode == Keys.F5 && My_Ready.Text == "") // F5를 눌렀을때 { string request = Constants.ROOM_EVENT + Constants.USER_READY_S..
1. 문제 링크https://www.acmicpc.net/problem/17298 2. 문제 접근- 왼쪽에서 오른쪽으로 볼때, 자신보다 큰 수 중에서 가장 가까운(왼쪽에 있는 수)를 구하면 된다.- 어떤 수를 기준으로 자신보다 큰 수가 등장했다는 건 그 수의 정답이 확정된다.- 즉, 큰 값이 나타날때까지 stack에 넣어주고 대기한다. 자신보다 큰 수가 등장하면 그 수가 정답이 된다.- 3을 처음 넣을때는 아무것도 없으므로, 바로 넣어준다. 이후 들어오는 값인 5는 스택에 있던 값인 3보다 크므로 오큰수다.- 이에 따라서, 3을 빼주고, 3에 대한 오큰수는 5임을 알 수 있다. - 2의 경우는 5에 대한 오큰수가 될 수 없기 때문에 그대로 넣는다.- 마지막으로 들어오는 7은 2보다 크기 때문에 2의 오큰..
1. 문제 링크https://www.acmicpc.net/problem/6198 2. 문제 접근- 개인적으로 문제는 Stack으로 풀면 쉽게 풀리는 것을 깨닫기가 어렵다.- Stack까지 생각해냈다면, 그 뒤에는 Stack의 특징을 잘 이용해서 풀 수 있다.- 왼쪽 건물에서 오른쪽 건물을 볼 수 있으려면 반드시 빌딩의 높이가 더 낮아야 한다.- 즉, 오른쪽 건물 중에 자신보다 높은 건물이 하나 등장하면, 이 건물이 더 이상 확인 가능한 건물은 없다.- 이를 잘 이용하면 stack을 이용해서 풀 수 있다. - 처음 10을 넣을때는 바로 넣는다. 3을 넣을때는 3이 10보다 작다. - 즉, 10의 관점에서는 3을 볼 수 있기 때문에 값을 1증가한다.- 7을 넣을때는 7이 3보다 크기 때문에, 3을 빼내고 ..
1. 문제 링크https://www.acmicpc.net/problem/2493 2. 문제 접근- 특정 i번째 탑은 레이저 수신을 위해서는 i-j (j 해야 한다.- 자신보다 높은 탑을 찾는 과정에서 존재하는 낮은 탑은 관심 없다.- 즉, 자신이 왼쪽으로 쏘는 시점에서 높이가 높은 탑이 있으면 해당 탑에 레이저를 쏴야하고, 없으면 쏠 대상이 없다. - 6은 아무것도 없기 때문에 레이저를 쏠 대상이 없다.- 9는 6보다 크기 때문에 6으로 레이저를 쏘는 것이 불가능하다.※ 이 시점에서, 6을 빼도 되는 이유는 6보다 높이가 더 큰 9가 오른쪽에서 왼쪽으로 쏠 모든 레이저를 받아내기 때문이다. - 5는 9를 향해 레이저를 발사할 수 있다. 하지만 7은 5에게 레이저를 발사할 수 없다.- 따라서 자신보다 낮은..
1. 문제 링크https://www.acmicpc.net/problem/1874 2. 문제 접근- 특정 수가 나오기 위해서는 우선, 그 수보다 작은 값이 먼저 등장해야한다.- 예를들어, 5라는 숫자가 나오기 위해서는 1,2,3,4가 먼저 등장해야 한다. (이미 나간 경우를 포함한다.)- 다음 나와야 할 값을 기록해서, 입력받은 수보다 작으면 계속 스택에 넣어준다. - 위와 같은 형태를 띈다.- 이때, 스택의 꼭대기 값을 확인해서 같은 값이면 뺀다. - 만약 같은 값이 아닌 경우, 연산이 불가능한 상황이므로, 이를 처리해주면 된다. 3. 문제 풀이- 현재 들어가야 하는 값과 입력 받은 값을 비교한다.- 만약 입력 받은 값이 더 크다면, stack에 입력 받은 값까지 push한다.- 이후, 스택에 top ..
1. 문제 링크https://www.acmicpc.net/problem/10773 2. 문제 접근- 0이 들어오면 가장 최근에 쓴 수를 지우는게 핵심인 스택을 사용할 수 있으면 어렵지 않게 풀이를 연상할 수 있는 문제다. 3. 문제 풀이- stack에 각 수를 넣는다.- 0이 들어오면 stack에 있는 꼭대기 값을 버린다.- n 만큼의 입력이 모두 끝나면, 그 값을 합산해주면 정답이 된다. 4. 소스 코드(C++)더보기#include #include using namespace std;int main(void){ int n; long long int answer = 0; stack value; ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; while (..
1. 문제 링크https://www.acmicpc.net/problem/1158 2. 문제 접근- 문제를 이해하는 것은 어렵지 않다. - 처음에 모든 인원을 삽입해주고, 중간 삭제를 위해서 list 등을 이용한 처리가 적합하다. 3. 문제 풀이- std::list를 이용해서 전체를 모두 넣어준다.- list에 대한 iterator를 순환 시켜서 계속 돌린다. - 이후, k번째에 해당하는 경우 삭제하고, 아닌 경우 다음 사람으로 넘어간다. (iterator값 증가)- 유의할 점은, 삭제된 이후 시점에 가리키는 요소나 다음 사람으로 넘어갈때 요소가 끝인 경우 처음으로 되돌린다. 4. 소스 코드(C++)더보기더보기#include #include using namespace std;int main(void){ ..