Loading...

[백준] 1941번 소문난 칠공주 (C++, 백트래킹)

DFS로 25개 중 7개를 고르는 조합을 만든다. 7개 원소를 골랐으면 그 중에 4명 이상이 이다솜파인지, 인접한지 확인한 후 ans를 올려준다. 번호를 0~24번까지 붙이면 y좌표는 해당 번호/5, x좌표는 해당 번호%5로 검사하면 된다. 복사 배열을 하나 더만들어서 조합으로 뽑은 위치에는 Z로 표시해줬다. 뽑은 수 중 하나 아무거나 넣은 후 근접 BFS를 돌렸을 때 Z의 총 개수가 7이 나오면 된다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; string student[5][5]; string carr[5][5]; bool visit[5][5]; int ypos[] = ..

[백준] 3090번 차이를 최소로 (c++, 이분탐색)

하루 종일 디버깅 못해 쩔쩔맸지만 양질의 문제다 차이를 mid로 둬서 이분탐색하는 건 알았지만 업데이트를 O(n^2)이 아닌 방법을 못 떠올렸다 100점이 안나오길래 다름 사람 코드 붙여넣어봤는데도 100이 안나와서 그냥 부분 성공했다 현재 위치 i를 업데이트 하면 이전 위치도 변경이 되는데 for문안에서 이중 포문 돌리는 것이 아니라 다시 반대 방향으로 for문을 돌리며 다시 업데이트 하면 된다. #define _CRT_SECURE_NO_WARNINGS #include using namespace std; #define MAX_N 100001 #define MAX_K 1000000001 int n, k; int arr[MAX_N]; int carr[MAX_N]; int ans[MAX_N]; int ma..

[백준] 16916번 부분 문자열 (c++, kmp)

여러 번 공부하고도 이해못했는데 결국 피하지 못해 풀었다 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; int ans = 0; //aabaa의 경우 a, aa, aab, aaba, aabaa 로 보는데 한글자인 a는 접두사,접미사가 같은걸로 보지 않음 // 따라서 i는 1부터 시작한다. vector makeTable(string p) {// 패턴문자의 접두사 접미사 구하기 int psize = p.length(); vector table(psize, 0); int j = 0; for (int i = 1; i 0 && p[i] != p[j]) { j..

[백준] 20920번 영단어 암기는 괴로워 (C++, hash, vector, sort)

단어가 들어오면 구조체 형태로 배열에 저장하는데, 배열의 접근 인덱스를 hash에 저장한다 만약 cat이라는 단어가 들어오면 hash['cat']=2 (cat이라는 단어의 배열의 인덱스가 2라는 뜻) 형태로 저장하는 것이다. hash에 해당하는 문자열이 없으면 0을 반환하기 때문에 배열 인덱스 0에는 저장하면 안되서 인덱스는 1부터 시작한다. 해당하는 조건에 따라서 정렬해줄때도 배열+1의 위치부터 정렬해주고 출력하면 된다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include using namespace std; #define endl "\n" typedef struct st { string word; int cnt; }..

[백준] 16165번 걸그룹 마스터 준석이 (C++, 해시)

해시를 두 개 만들어서 팀 이름에는 멤버리스트 저장, 멤버 이름에는 팀 이름 저장함 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); unordered_map member; unordered_map group; int n, m; string team,name; int cnt; cin >> n >> m; for (register int i = 0; i > team >> cnt; vector temp; for (register in..

[백준] 7795번 먹을 것인가 먹힐 것인가 (C++, 정렬 혹은 이분탐색)

정렬 혹은 이분탐색으로 많이 풀던데 나는 내림차순 정렬해놓고 i, j 를 모두 0으로 초기화한 다음 a가 더 작으면 i를 증가, b가 크면 j를 증가시키는 방식으로 비교해줬다 O(n+m) 이라고 생각됨 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); int t; cin >> t; while (t--) { int a[20000]; int b[20000]; int n, m; cin >> n >> m; for (register int i = 0; i > a[i];..

[백준] 10825번 국영수 (C++ , 정렬)

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include using namespace std; struct Student { string name; int kor, eng, math; }; Student s[100001]; bool comp(Student &a, Student &b) { if (a.kor == b.kor) { if (a.eng == b.eng) { if (a.math == b.math) { return a.name b.math; } else return a.eng b.kor; } int main(void) { ios::sy..

[백준] 5648번 역원소 정렬 (C++, 정렬)

예제를 보고 알아서 정렬 조건을 만들어줘야 된다. 0을 없애기 위해 문자열을 정수로 변환한 후 다시 문자열로 만들어줬다 #define _CRT_SECURE_NO_WARNINGS #define rep(i,s,e) for(int i=s;i> n; rep(i, 0, n) { cin >> tmp; reverse(tmp.begin(), tmp.end()); a.push_back(to_string(stol(tmp))); } sort(a.begin(),a.end(),cmp); for (auto x : a) { cout

[백준] 11652번 카드 (C++, 정렬)

일단 저장해놓고 정렬한 후 최대 갯수 갱신하며 답 찾아나가는 방법 #define _CRT_SECURE_NO_WARNINGS #define rep(i,s,e) for(int i=s;i> n; long long num[100001]; rep(i, 0, n) { cin >> num[i]; } sort(num, num + n); int cnt = 1; int max = 1; long long ans = num[0]; rep(i, 1, n) { if (num[i] == num[i - 1]) { cnt += 1; if (max < cnt) { max = cnt; ans = num[i]; } } else { cnt = 1; } } cout

[백준] 1431번 시리얼 번호 (C++, 정렬)

C++ 어려버 ㅠㅠ 새 언어로 처음부터 다시 하려니 힘들다 #define _CRT_SECURE_NO_WARNINGS #define rep(i,s,e) for(int i=s;i='0' && a[i]= '0' && b[i] > n; vector v(n); rep(i, 0, n) { cin >> v[i]; } sort(v.begin(), v.end(), cmp); for (auto x : v) { cout