Algorithm/boj
백준 2870 //vector<string>정렬은 커스텀으로, string토큰화
2870번: 수학숙제 (acmicpc.net) 2870번: 수학숙제 종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차 www.acmicpc.net * 토큰화 for(s.len){ 숫자면 ret누적 아니고 토큰잇으면 ->go }if(남음)->go //뒤에 su00이런경우 처리 * go() 1.앞의 0지우기 2.모두지웟는데 빈칸 == 000이런경우 ret=0 3.v.push(ret) 4.ret초기화 #include using namespace std; typedef long long int ll; int n, c, a[1004]; map mp; //인덱스,모음(1)자음(..
백준 4659 // 문자열==비교가능
4659번: 비밀번호 발음하기 (acmicpc.net) 4659번: 비밀번호 발음하기 좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp www.acmicpc.net ※ 조건2,3은 글자수가 2글자, 3글자 이상일때만 검사해야함. 1.입력시, mp에 (idx,1(모음)2(자음)) 여부저장. => 조건3에서 검사쉽게. #include using namespace std; typedef long long int ll; int n, c, a[1004]; map mp; //인덱스,모음(1)자음(2) string s; bool f(string s) { if (s.find('..
백준 2910 빈도정렬 // 커스텀정렬, 인덱스에 의미부여
2910번: 빈도 정렬 (acmicpc.net) 2910번: 빈도 정렬 첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다. www.acmicpc.net * 인덱스에 의미를 부여하라! ex)mp[2] ==2의 빈도 mp(해당숫자,빈도) mp_first(해당숫자,최초등장순서) v(빈도,해당숫자) *빈도수(v.first)만큼 출력해야함에 주의 ex) (0,0) (2,1) (3,2) 일때, 0은 출력안됨, 1 1 2 2 2 출력. for (auto i : v) { for (int j = 0; j n>>c; for (int i = 0; i <..
백준 7562 // 최단거리는 bfs, 핵심로직공부
7562번: 나이트의 이동 (acmicpc.net) 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net *최단거리 bfs 핵심로직 1. 방문배열 값 == 이동거리 1-1. 초기 방문배열값=1 2. while-for문내 : v[ny][nx] = v[y][x] + 1; #include using namespace std; typedef long long int ll; int l, tc,ny,nx,o1,o2,t1,t2,y,x,ret, a[304][304], v[304][304]; int dx[] = {1,2,2,1,-1..
백준 11724 // 연결리스트 dfs, for문 1~n까지만
11724번: 연결 요소의 개수 (acmicpc.net) 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 1~1000개를 다 검사할 필요x n개 정점만 검사하면됨. for (int i = 1; i > t1 >> t2; a[t1][t2] = 1; a[t2][t1] = 1; } //dfs(v); //for (int i = 0; i < 1004; ++i) visited[i] = 0; //cout
백준 1260 //dfs-bfs하는법 , 연결정보준경우
1260번: DFS와 BFS (acmicpc.net) 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net * bfs 하는법 1.q메이커 2.push 3.while(size) 4.연결됨 & 미방문 -> push, 방문처리 #include using namespace std; typedef long long int ll; int n, m,v,t1,t2, a[1004][1004], visited[1004]; int dx[] = {0,1,-1,0}; int dy[] = {1,0,0,..
백준 2667 // int dfs사용법, scanf-cin혼용금지
2667번: 단지번호붙이기 (acmicpc.net) 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net * int dfs 구현방법 1. dfs내의 int ret=1 2. main의 ret.push(dfs(i,j)) * scanf-cin혼용금지 ios와 cin을 지우고 scanf로 고쳤더니 정답...? #include using namespace std; typedef long long int ll; int n, c, a[25][25], v[25][25]; int dx[] = {0,1,-1,0}; int dy[] =..
백준 2583 영역구하기 //int dfs , ny>=mn체크 , 좌표를배열로바꾸기
https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 1.int dfs => 영역안의 원소가 몇개인지 카운팅 2.ny>m,n 둘중 뭐쓸지 확실하게 3.좌표를 배열로 바꾸기 #include using namespace std; #define y1 aaaa const int max_n = 104; int m,n,k, ny, nx, ans, a[max_n][max_n], visited[max_n][max_n]; int dx[] = { ..