1. 문제 설명링크 : https://www.acmicpc.net/problem/117232. 풀이 과정문제 해결의 흐름 처음에는 문제 제목처럼 집합 STL (std::set)을 사용하는 문제라고 생각하고 풀었더니 시간 초과로 문제가 자꾸 틀렸습니다! 입출력 시간도 줄여보고 여러 시도를 해봤지만, 이 방법은 정답이 아닌듯 보였습니다. 그래서 배열로 해결할까 고민하던 중 알고리즘 분류를 까보니 비트마스킹으로 풀어야하더라구요! 한번도 풀어본 적 없는 풀이법이라 많이 당황하였지만 CS 과목을 들으며 비트 연산에 익숙해졌기에 도전해보았습니다. 비트마스킹이란? 이진수 비트들을 활용하여 데이터를 효율적으로 저장하고 조작하는 기법메모리 절약, 속도 측면에서 엄청난 장점이 있음 비트마스킹을 통해 특정 비트를 1, 0..
구현
1. 문제 설명링크 : https://www.acmicpc.net/problem/15829 문제에서 주어진 해시 함수 식과 주어진 문자열을 바탕으로 해시값을 계산해내는 간단한 문제였습니다!2. 풀이 과정문제 해결의 흐름 우선, 입력 문자열의 각 문자를 정수값으로 변환하는 과정을 거쳤습니다. 처음엔 int(str[i]) - 96과 같은 방식으로 변환하였는데 아래 코드와 같이 변환하는 것이 더욱 깔끔하다고 느껴 바꿨습니다. 이후 pow 함수를 사용하여 해시 함수식을 정확히 계산해 낸 거 같았는데 자꾸 50점에서 그치더라구요 ㅠㅠ. 원인은 2가지로, 입력 크기와 오버플로우 때문이었습니다. 입력 문자열의 길이 L이 최대 50으로 짧아 보였지만, r**i 값은 기하급수적으로 커져 연산 범위를 초과할 가능성이 있었..
1. 문제 설명링크 : https://www.acmicpc.net/problem/317962. 풀이 과정문제 해결의 흐름 입력 받은 N개의 책 가격들을 오름차순으로 정렬하자. 책 가격들이 저장된 vector를 탐색하며 제일 값싼 책을 기준으로 2배 이상의 가격이 있다면 페이지를 늘리고 그 가격을 제일 값싼 책으로 갱신한다. 나의 코드#include#include #include using namespace std;int main() { // 입력 받기 int N; cin >> N; vector bookPrice; for (int i = 0; i > price; bookPrice.push_back(price); } // 정렬 sort(bookPrice..
1. 문제 설명링크 : https://www.acmicpc.net/problem/317972. 풀이 과정문제 해결의 흐름 아파트 층 수를 (참가자의 수 * 2)로 나눠주자! 참가자는 손이 두 개고 (참가자의 수 * 2)로 나눠준 나머지가 실질적인 아파트 층 수라고 봐도 무방하다. 만약 (참가자의 수 * 2)로 나눈 나머지가 0이라면 아파트 층 수는 (참가자의 수 * 2)이다. 반복문을 돌며 아파트 층 수번째 층에 있는 손바닥의 주인을 찾는다. 나의 코드 #include #define MAX 10001using namespace std;int arrApartment[MAX] = {}; // 0으로 초기화int main() { // 입력 받기 int N, M; // N : 아파트 층 수 , M :..
1. 문제 설명링크 : https://www.acmicpc.net/problem/317892. 풀이 과정문제 해결의 흐름후안의 돈으로 들고 있는 무기보다 큰 공격력의 무기를 살 수 있다면 모험을 떠날 수 있다. 나의 코드 #include #define MAX 101using namespace std;int N; // 무기의 수int X, S; // X : 돈, S : 후안의 공격력int weaponPower, weaponPrice;int main() { cin >> N; cin >> X >> S; bool result = false; for (int i = 0; i > weaponPrice >> weaponPower; if (weaponPrice S) { ..