Make Unreal REAL.
article thumbnail
Level 2. 숫자 변환하기

Level 2. 숫자 변환하기 첫 번째 시도에서는 정답이었으나 시간 초과가 발생했다. 값이 아니라 연산 횟수가 적은 순으로 BFS를 수행하다보니 그런 것 같다. // 이 풀이는 시간 초과가 발생한다. #include #include #include using namespace std; int solution(int x, int y, int n) { auto op1 = [n](int x) { return x + n; }; auto op2 = [ ](int x) { return x + x; }; auto op3 = [ ](int x) { return x + x + x; }; queue que; que.emplace(make_pair(0, x)); while (!que.empty()) { auto& pr = ..

article thumbnail
Level 2. 튜플

Level 2. 튜플 파싱하는 것이 주가 아닌 문제였는데 파싱조차 까다로운 문제였다. 나는 일단 양 끝의 중괄호 2개씩을 제거하고 "},{"를 " " 공백으로 교체해 1번 파싱했다. 그리고 콤마로 구분된 숫자 배열 문자열에서 "," 를 " " 공백으로 교체해 배열의 각 숫자 하나씩을 가져왔다. 2차원 벡터에 숫자들이 담기고 나서는 크기가 작은 벡터에 담긴 수일수록 앞에 온다는 성질을 이용해, 길이가 1인 벡터의 숫자를 정답에 추가하고 나머지 벡터에서 제거하는 방식으로 해결했다. #include #include #include #include #include using namespace std; vector solution(string s) { vector answer; vector elements; st..

article thumbnail
Level 2. 오픈채팅방

Level 2. 오픈채팅방 2019년에 카카오에서 출제한 재밌는 문제였다. 각 유저의 닉네임은 가장 최근에 변경한 것으로 보여야하기 때문에, 기록을 확인하면서 정답을 수정하는 것보다는 기록을 한 번에 다 확인하고 정답을 한꺼번에 작성하는 것이 좋다. 이름 변경 명령이면 단순히 이름을 바꾸고, 입장/퇴장 명령이면 유저 아이디와 함께 출력할 정답 배열에 추가한다. #include #include #include #include #include using namespace std; vector solution(vector record) { vector answer; vector op_uid; unordered_map uid_name; for (string rec : record) { string op, uid..

article thumbnail
Level 2. 이진 변환 반복하기

Level 2. 이진 변환 반복하기 문제에 나와 있는 대로만 따라가면 잘 풀 수 있는 문제다. remove() 함수가 지워주기까지 하는 것이 아니라, 삭제할 원소들을 뒤로 몰아넣을 뿐이라는 걸 깜빡한 것만 빼면 크게 어려운 건 없었다. 십진수를 이진수로 변환할 떄는 LSB 비트 마스킹과 Shift Right 비트 연산자를 사용했다. #include #include #include using namespace std; string ToBinaryString(int num) { string s = ""; if (num == 0) return "0"; do s = (num & 1 ? "1" : "0") + s; while (num >>= 1); return s; } vector solution(string s..

article thumbnail
Level 2. 최댓값과 최솟값

Level 2. 최댓값과 최솟값 이번 문제와 같이 문자열이 정수와 공백으로 구분되어져 있다면 굳이 직접 파싱하지 않고 istringstream을 이용해도 된다. 또 최댓값과 최솟값 이외의 수들은 굳이 정렬 상태를 유지할 필요가 없으므로, 숫자를 1개씩 받으면서 그때마다 큰 수 혹은 은 작은 수를 저장하면 된다. #include #include #include #include using namespace std; string solution(string s) { int num; int Min = INT_MAX, Max = INT_MIN; istringstream iss(s); ostringstream oss; while (iss >> num) { Min = min(Min, num); Max = max(Ma..

article thumbnail
Level 2. 피로도

Level 2. 피로도 처음엔 이 문제가 그리디 문제인 줄 알았다. 그런데 가장 최소 피로도가 높은 순으로 생각해봐도, 가장 소모 피로도가 낮은 순으로 생각해봐도 맞는 방법이 아니라는 걸 알았다. 결국 순열을 만들어 모든 경우의 수를 계산해야 한다. #include #include #include using namespace std; int solution(int k, vector dungeons) { int answer = -1; size_t size = dungeons.size(); vector pmt(size); for (int i = 0; i < size; ++i) pmt[i] = i; do { int cnt; int stamina = k; for (cnt = 0; cnt < size && 0 <..

검색 태그