목록전체 글 (99)
한다 공부
알고리즘 분류를 보니 비트마스킹이라고 되어있었다 하지만 비트마스킹이 익숙하지 않아서 set을 이용했다 아니나 다를까 나타나는 시간초과 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 를 이용해서 cin과 cout의 시간을 단축시키자 그리고 all 명령어를 받으면 기존 set 내용을 지우고 set에 1~20값을 새로 넣어야한다 이때 for문 쓰면 시간초과 뜬다 직접 값을 넣기로 하자... #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); set s; int n; cin >> n; string str;..
스택의 대표적인 예제 후위표기식 문제이다. 처음에는 문자열 받는 스택 따로, num 받는 스택 따로 받으려고 했다 그러면 미지수 나올 때 마다 num[i++]시켜서 다음 숫자 꺼내오면 된다고 생각함 그런데 알파벳이 두 번 연속으로 나올 수 있다 그럴 땐 i++하면 낭패.... 인덱스와 알파벳을 연결해줘야한다. 어차피 알파벳은 A->B->C .... 순서대로 나오므로 엇갈일 일은 없다 첫번째 받는 변수를 (인덱스0) A라고 생각하고 두번째 받는 변수는 (인덱스1) B라고 생각... 이렇게 진행하면 된다. 그럼 인덱스 찾기도 쉽다 A의 인덱스는 0이다. B의 인덱스는 'B'-'A'=1이다. 즉 원하는 인덱스는 str[i]-'A'이다. str[C]=123 (예시) 이런식으로 값이 있는 것임 인덱스만 알면 값은..
20920번 문제 영단어 암기는 괴로워 괴롭다 정말 이 문제는 시간제한이 매우 짧다. 처음에는 pair만을 이용해서 전체를 비교하고 정렬했었는데 시간초과가 떴었다... 이를 해결하려면 map을 이용해야한다. map은 트리구조에다가... 자동으로 정렬이 되기 때문에 내가 원하는대로 정렬시키기가 매우 힘들다 다른 사람들은 어떻게 풀었나 찾아본 결과 1. map을 전역변수로 선언해서 정렬 2. map 내용을 pair에 복사해서 정렬 크게 이렇게 두 가지 방법이 있었다. 나는 2번으로 풀었었다 이 방법 저 방법 다 해보느라 시간 참,,, 많이 쓴 문제.. #include #include #include //sort #include #include //pair using namespace std; //문제에 주어..
덱은 자료구조 정리 카테고리에 정리를 해뒀다. [C] 큐 : 선형큐, 원형큐, 덱 c++ STL 함수를 정리하기 좋은 문제 #include #include using namespace std; int main() { deque d; string str; int n, num; cin >> n; while (n--) { cin >> str; if (str == "push_front") { cin >> num; d.push_front(num); } else if (str == "push_back") { cin >> num; d.push_back(num); } else if (str == "pop_front") { if (d.empty()) cout
난이도가 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_..