목록Algorithm (60)
한다 공부
난이도가 gold라 어려울줄 알았는데 생각보다 어렵지 않던 문제...! 공백을 입력받아야하므로 cin 대신 getline을 쓰고 소숫점 넷째자리까지 나타내기위해 아래와 같이 쓰면 된다 cout
이 문제는 1764 듣보잡 문제와 유사하다 대신 더 쉽다 왜냐하면 중복되는 문자열은 출력할 필요 없고 중복 갯수만 출력하면 되기 때문! 1764는 map, set을 이용했는데 이 문제는 map만 이용했다. #include #include using namespace std; int main() { int n, m; map first; string temp; cin >> n >> m; while (n--) { cin >> temp; first[temp] = 1; } int count = 0; while (m--) { cin >> temp; if (first[temp] == 1) count++; } cout
들어보지도 못한 사람 명단과 보지도 못한 사람 명단에서 중복되는 사람의 데이터를 찾는거다 map set 사용을 배웠기 때문에 이를 이용해보고자 함 #include #include #include using namespace std; int main() { int n, m; map name; string temp; cin >> n >> m; while (n--) { cin >> temp; name[temp] = 1; } //듣지도(n) 보지도(m) 못한 사람의 명단을 set에 저장 set output; while (m--) { cin >> temp; if (name[temp] == 1) output.insert(temp); } cout
눈물이.. 나는군..^^ 우선 자신의 언어에서 -5/2가 -3인지 확인해보자 c++은 -2가 나온다 그럼 주구장창 해도 틀렸습니다 나옴,, 힌트 아랫부분에 이 내용이 쓰여있어서 진짜 몰랐다,, 결국 구글링해서... 버림은 cmath include하고 floor쓰면된다는 걸 알게 된.. 그리고 floor안에 double이나 float로 형변환 안 해주면 틀린다 문제가 좀 말이 많다.. 요요라길래 어릴 때 가지고 놀던 그 요요 장난감인줄 알았다 그냥 입력하란거 입력받고 출력하란거 출력하고 계산부분 구현하면 답이,, 나온다 다이어트 전 일일 에너지 섭취량과 일일 기초 대사량을 l0 라는 변수에 같이 입력 받아서 좀 헷갈렸는데 기초 대사량은 변하기 때문에 새로운 변수 만들어 줘야함 난 change_b로 담았다 ..
수의 합이어서 쉬운문제인줄 알았는데 입력값의 범위가 10의 10000승이기 때문에 숫자로 값을 받으면 안된다 그래서 문자열로 받음,,! 뒷자리수부터 더하려니 복잡해져서 역순으로 하고 더하고 다시 되돌렸다 1234 + 12 의 경우 4321 + 21 을 하고 원래대로 돌렸다. 그런데 문자열 길이가 다르면 에러가 나기 때문에 4321 + 2100 이런식으로 문자 0을 추가했다. 반올림 값도 고려해야함. 그것은 carry로! #include #include using namespace std; string add(string a, string b) { //역순으로 해서 끝자리부터 더해주기 //1234 //+ // 12 의 경우 //4321 //+ //21 로 변경, 자리 수 다를 경우 번거로워서.. rever..
이 문제에서는 pair를 써봤다 x, y좌표를 pair에 담고 각 pair들을 vector에 담음 pair의 첫번째 원소 접근시에는 p.first, 두번째 원소는 p.second를 이용하면 된다 #include #include #include #include using namespace std; bool cmp(pair a, pair b) { if (a.second != b.second) return a.second > n; temp = n; vector v; while (temp != 0) { int x, y; cin >> x >> y; v.push_back(make_..
이 문제는 sort STL을 이용해서 풀었다 알고리즘을 include하고 sort(시작, 끝, 정렬방식(선택)); 하면 된다. 정렬방식의 경우 기본 값은 오름차순이라 한다. #include #include #include using namespace std; //각 자리 숫자 합 함수 //아스키 코드 이용해서 문자열 중 숫자만 추출 int sum(string s) { int i, sum = 0; for (i = 0; i = 48 && s[i] > n; temp = n; while (temp != 0) { cin >> num; guitar.push_back(num); temp--; } sort(guitar.begin(),guitar.end(),cmp)..
문제 : 같은 알파벳이 나온다면 무조건 연속해야한다. 그러한 문자열의 갯수 출력 예시 : 11 happy new year aba abab abcabc a limi abbbbbba cbalsl bb 를 입력한다면 출력이 5가 되어야 한다. 왜냐하면 그룹단어는 happy new year a bb 이기 때문 다들 알파벳 배열 만들어서 하던데 나는 다른 방법을 이용해보고 싶어서 마음대로 풀다가 더 고생한 느낌이다,, 아이디어 : 주석참고 1. 문자열 총 갯수 = total 2. 그룹 단어가 아닌게 발견되면 total-- 3. i번째 문자열의 j번째 알파벳을 j++해나가며 같은 알파벳 있는지 체크 4. 연속하면서 같은 알파벳은 pass, 연속하지 않은데 같은 알파벳이면 total-- 하기 5. 한 문자열 체크 했..
우선순위 큐란, 우선순위의 개념을 큐에 도입한 자료구조이다. 선입선출 FIFO(First In First Out)인 큐와 달리 우선순위 큐는 우선순위가 높은 데이터가 먼저 나온다. 우선순위 큐는 배열, 연결리스트를 이용할 수도 있지만 히프라는 자료구조로 구현하려고 한다. Heap heap heap 히프는 우선순위 큐를 위해 만들어진 자료구조이다 배열로 구현한 히프는 삭제시 O(n)의 복잡도를 가지고 연결리스트 히프는 삭제시 O(n)의 복잡도를 가진다 하지만 히프의 경우 어느정도 정렬이 된 상태기 때문에 O(log n)의 복잡도를 가진다 데이터가 많아질수록 n과 log n의 경우 차이가 크기 때문에 히프를 사용하는 것이 효율성이 높다 히프는 부모 노드의 키 값이, 자식 노드의 키 값보다 항상 큰 이진트리이..
binary search tree 이진 탐색 트리 : 이진 트리 기반의 탐색을 위한 자료구조이다. 이진 탐색 트리의 정의는 다음과 같다. 모든 원소의 키는 유일한 키를 가진다. 왼쪽 서브 트리 키들은 루트 키보다 작다. 오른쪽 서브 트리의 키들은 루트의 키보다 크다. 왼쪽과 오른쪽 서브 트리도 이진 탐색 트리이다. 쉽게 말하자면 루트를 기준으로 작은 수는 왼쪽 노드에, 큰 수는 오른쪽 노드에 붙이면 된다. 18 26 7 12 3 31 27 이 랜덤하게 주어졌다고 하자. 그럼 우선 첫 번째 주어진 18을 루트로 잡는다. 그리고 두 번째 주어진 26은 18보다 크므로 오른쪽 자식노드로, 세 번째 주어진 7은 18보다 작으므로 왼쪽 자식노드로 넘긴다 그리고 네 번째 주어진 12는 18보다 작으므로 왼쪽 자식노..