Level 1. 크레인 인형뽑기 게임 큐의 배열을 이용해 인형 뽑기 머신을 클래스로 추상화시켜 해결했다. 어려운 문제는 아니었고 카카오에서 내는 시뮬레이션 문제 중에 재밌는 것들이 많은 것 같다. #include #include #include #include using namespace std; class ClawMachine { private: vector board; public: ClawMachine(vector& board) : board(vector(board.size())) { for (vector row : board) for (int i = 0; i board[i].emplace(row[i]); } int pull(int ..
Level 1. 키패드 누르기 어렵지도 않고 보자마자 어떻게 구현해야 할지 감이 잡혀서 꽤 재밌는 문제였다. 이차원 좌표를 저장하는 Pos 구조체를 만들고 연산자 오버로딩을 이용해 각 번호의 거리를 계산하는 함수를 구현해 해결했다. #include #include using namespace std; struct Pos { int x; int y; int operator - (const Pos& p) { return abs(x - p.x) + abs(y - p.y); } }; Pos position(int key) { key = (key == 0) ? 11 : key; return Pos{--key % 3, key / 3}; } int distance(int x, int y) { return positi..
Level 1. [1차] 다트 게임 문자열을 문자로 순회하고 isdigit() 함수를 활용했다. #include #include #include #include using namespace std; int solution(string dartResult) { char prev = '\0'; vector points; for (char c : dartResult) { if (isdigit(c)) { if (isdigit(prev)) points.back() = points.back() * 10 + (c - '0'); else points.emplace_back(c - '0'); } else if (c == '#') { points.back() *= -1; } else if (c == '*') { point..
Level 1. 체육복 굉장히 난잡하게 풀었다. 입출력 예시가 오름차순으로 되어 있어서 정렬된 상태로 주어지는 줄 알았는데 아닌 경우도 있어서 정렬을 해야했다. 탐욕법을 하되 작은 수부터 처리해야 하기 때문이다. 첫 번째 for문은 여벌을 가진 학생 중 도난당한 학생을 제거하는 부분이다. 번호가 작은 학생부터 앞번호, 뒷번호 차이가 ±1 인 경우를 세어 해결했다. #include #include #include using namespace std; int solution(int n, vector lost, vector reserve) { int nLost; vector t_lost; sort(lost.begin(), lost.end()); sort(reserve.begin(), reserve.end())..
Level 1. 문자열 나누기 처음에 문제의 조건을 x가 아닌 다른 글자들이 아니라 x가 아닌 다른 글자들 중으로 잘못 이해하여 정답률이 31%가 나왔다. // 이 코드는 틀린 풀이이다. #include #include #include #include using namespace std; int solution(string s) { int answer = 0; unordered_map umap; for (int i = 0; i < s.length(); ++i) { ++umap[s[i]]; int minCount = INT_MAX; for (pair pr : umap) { if (pr.second == minCount) { s = s.substr(i + 1); ++answer; umap.clear(); i..
Level 1. 기사단원의 무기 약수의 개수를 효율적으로 구하는 것이 중점인 문제였다. 나는 num의 제곱근만큼 순회하면서 나머지 연산을 이용해 계산하였다. #include #include using namespace std; int getNumberOfDivisor(int num) { int last = sqrt(num); int count = (pow(last, 2) == num) ? -1 : 0; for (int i = 1; i