백준/해시 12

[백준] C++ 2866번 문자열 잘라내기

위 예제와 같은 경우에는 가장 위에 행을 지우면 a d a t a k 이렇게 a가 중복되어서 count가 0이 된다. 문제해결방법1. 행과 열을 바꿔서 string에 저장한다.2. 열을 하나씩 지워주면서 단어를 수집하는데 이 단어를 HashSet에 저장한다.3. 만약 HashSet에 이미 존재한다면 count를 출력하고 종료한다. substr를 사용하기 위해 행과 열을 바꿔서 string에 저장함.#include #include using namespace std;string s[1001];int main(void){ int R, C = 0; cin >> R >> C; for (int i = 0; i > temp; s[j] = s[j] + temp; } } int count = 0; for (int..

백준/해시 2024.10.06

[백준] C++ 1354번 무한 수열2

이 문제는 HashMap과 재귀함수를 활용해서 해결하는 문제이다. 문제해결방법1.HashMap에 만약 내가 필요한 값이 있다면 바로 return을 하고 없다면 재귀적으로 그 값을 찾는 함수를 작성해야한다.(hashMap[0]=1) #include #include using namespace std;long long N, P, Q, X, Y = 0;unordered_map hashMap;long long sol(long long num);int main(void){ cin >> N >> P >> Q >> X >> Y; hashMap[0] = 1; cout

백준/해시 2024.10.03

[백준] C++ 1351번 무한수열

A(i)=A(i/P)+A(i/Q)을 이용해서 A(N)을 구하는 문제이다.N의 범위가 10^12까지여서 일반적인 배열을 이용해서는 문제를 해결할 수 없다.재귀함수를 통해 계속해서 밑으로 내려간 후 밑에서부터 결과값을 가지고 차근차근 올라오는 느낌으로 문제를 해결해야 한다. 그렇다면 A [temp]의 값은 어디에 저장을 하는가?? HashMap에 저장을 하면 된다. hashMap [temp]=A [temp]이런 식으로 저장하면 된다. (unordered_map ) 문제해결방법1. hashMap에 찾고자 하는 값이 있다면 바로 return을 하고 찾고자하는 값이 없다면 재귀적으로 계속 값을 찾아나간다.2. 만약 N=1으로 입력이 들어오면 1을 출력해야 함에 주의하자.3. int형이 아닌 long long으로 ..

백준/해시 2024.10.02

[백준] C++ 2910번 빈도정렬

이 문제는 등장하는 빈도순대로 정렬하는 문제이다.자주 등장하면 앞에 나오고 만약 등장 횟수가 같으면 먼저 등장한 숫자를 먼저 출력한다. 문제풀이방법1. hashMap에 숫자의 등장횟수와 등장순서를 저장한다.2.등장횟수와 등장순서에 따라 정렬한다.3.정렬된 순서에 따라 출력한다. #include #include #include #include using namespace std;bool cmp(pair> &a, pair>& b){ if (a.second.first == b.second.first)//만약에 등장횟수가 같으면 { return a.second.second b.second.first; }}int main(void){ unordered_map> hashMap; int N = 0; int M =..

백준/해시 2024.10.01

[백준] C++ 13414 수강신청

수강신청에 성공한 인원을 출력하는 문제이다.만약 수강신청을 했는데 다시 신청하면 순위가 맨 뒤로 밀린다. 문제해결방법1.L번만큼 hashMap에 학번을 입력받는다. hashMap은 이다.2.hashMap의 int를 정렬해야하는데 hashMap은 정렬이 불가능하기 때문에 vector로 복사해서 정렬을 해준다.3.K개만큼 출력해 준다.(주의할 점: 중복을 엄청 많이 해서 사실상 남아있는 사람은 몇 명 없을 수도 있음. 그런데 K가 크면 index오류가 발생한다.) #include #include #include #include using namespace std;bool cmp(pair& a, pair& b){ return a.second hashMap; int K = 0; int L = 0; cin >..

백준/해시 2024.10.01

[백준] C++ 1302번 베스트셀러

가장 많이 팔린 책의 이름을 출력하는 문제이다. 만약 많이 팔린 책이 여러 개이면 사전순으로 정렬해야 한다. 문제해결방법1. HashMap을 사용해서 책이 몇 번 입력받았는지 저장한다. unordered_Map hashMap2. HashMap을 정렬할 수는 없으니 HashMap을 백터로 복사해서 백터를 정렬한다.3. 백터를 정렬하면 string을 기준으로 사전순으로 정렬되기 때문에 for문을 돌면서 정렬된 백터의 가장 큰 값만 찾아주면 끝난다. #include #include #include #include using namespace std;int main(void){ unordered_map hashMap; int N = 0; cin >> N; for (int i = 0; i > temp; has..

백준/해시 2024.10.01

[백준] C++ 2002번 추월

굉장히 재미있었던 문제였다. 추월이라니?!  모두 안전 운전합시다! 문제해결방법1.hashMap을 통해 차량번호와 순서를 저장한다.2. 터널 출구에서 나오는 순서를 확인하면서 만약 자기보다 뒤에 있었던 차가 자기보다 앞으로 가있다면 추월한 차량을 기준으로 앞에 있는 차량들의 순서를 +1 해준다.(자기보다 앞에 있는 차가 다른 차를 추월하는 것은 자신의 순서에 영향을 미치지 않는다.) 그림을 보면 B가 A를 추월하였다. C D E의 순서에는 영향을 미치지 않았고 A의 순서에만 영향을 미쳤다. #include #include using namespace std;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); unordered_map..

백준/해시 2024.09.29

[백준] C++ 4358번 생태학

문제해결방법1. 입력을 받으면서 count를 센다.(이번 문제는 입력의 개수를 제시하지 않아서 평소에 입력받던 데로 받으면 안 됨. getline() 함수를 통해 입력받아야 한다.)2. 소수점 넷째 자리로 고정한다.(cout3. unordered_map을 사용하면 vector로 데이터를 복사하고 sort함수를 통해 정렬해 준다.(map을 사용하면 vector로 데이터를 복사하고 sort함수를 사용할 필요가 없음.)4. %로 변환해서 출력해준다. #include #include #include #include #include using namespace std;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); unordered_ma..

백준/해시 2024.09.29

[백준] C++ 20920번 영단어 암기는 괴로워

문제해결방법1. for문을 통해 입력을 받는 동시에 길이가 M미만인 단어는 거른고 M이상인 단어만 HashMap에 insert 한다.2. hashMap은 순서가 없기 때문에 hashMap 있는 데이터를 vector에 옮긴다.3. vector를 정렬하는데 비교함수를 정의해서 정렬한다.4. 백터의 요소를 출력한다. #include #include #include #include using namespace std;bool cmp(pair& a, pair& b){ if (a.second == b.second) { if (a.first.length() == b.first.length()) { return a.first b.first.length(); ..

백준/해시 2024.09.28

[백준] C++ 11478번 서로 다른 부분 문자열의 개수

문제해결방법1. for문의 범위값을 제대로 설정한다.(부분 문자열의 길이가 1, 2, 3 ,4, 5 이렇게 증가한다. 2중 for문 사용.)2. 부분 문자열을 S에서 추출한다.(C++의 경우 substr() 함수를 사용)3. HashSet에 부분 문자열을 insert 한다.(만약 이미 HashSet에 지금 삽입하려는 문자열이 존재하는 경우는 삽입하지 않음.)#include #include using namespace std;int main(){ unordered_set hashSet; string N = ""; int count = 0; cin >> N; for (int i = 0; i  그림을 그려가면서 for문을 작성하면 더 쉽게 범위를 구할 수 있다..

백준/해시 2024.09.28