백준 algorithm
-
백준 1015 - 수열 정렬백준 algorithm 2020. 7. 15. 23:43
=> pair를 사용하여 문제를 해결하였습니다. => pair.first : 원소 값 => pair.secodn : 원래의 INDEX 값 => 위와 같이 설정을 하고 문제를 풀었습니다. 입력받은 pair형 vector를 sort함수를 하여 정렬시킵니다. 정렬된 배열을 처음부터 읽으며, second 값을 기준으로 새로운 배열의 INDEX에 값을 대입합니다. ans [arr [i]. second]=i; 위와 같은 논리로 코드를 짰습니다. *pair형 배열을 만드는 방법을 찾지 못해, pair형 vector로 답을 생성하였습니다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.ti..
-
백준 1924 - 2007년백준 algorithm 2020. 7. 10. 14:12
=> 구현 문제입니다. => 해당 문제의 경우 1년의 case만 생각하면 되기 때문에 brute Force(브루트 포스)로 문제를 풀어도 전혀 무방합니다. week [7] : 일주일을 저장하는 배열 index : 위의 배열을 따라다니며 요일을 확인하는 변수 X와 Y의 값을 입력받습니다. switch case문을 이용해 한 달이 31일인 경우, 30일인 경우 28일인 경우를 나눕니다. 제가 구하는 달의 일까지만 index를 지속적으로 추가해줍니다. index는 7을 벗어나지 않으므로, %7을 해주어 숫자가 커지는 것을 방지해줍니다. weel [index]의 값을 출력합니다. => 위와 같은 logic을 따라 입력받은 X월 Y일의 요일을 알아낼 수 있습니다. => 다른 사람의 경우 X 이전의 달들을 inde..
-
백준 10989 - 수 정렬하기 3백준 algorithm 2020. 7. 9. 12:49
=> 구현 카테고리에 있지만, 구현 문제가 아닌 것 같습니다. => vector에 넣어 sort 함수를 사용할 경우 시간제한과 메모리 제한에 걸리게 됩니다. => 해당 문제를 해결하기 위해서는 기존의 문제들과는 다른 시선이 필요합니다. arr [10001]arr [10001] : 주어지는 수는 10000 아래의 수입니다. 그러므로 해당 숫자가 몇 개가 들어가는지 확인하는 배열을 선언합니다. max : 출력할 때, 쓸데 없는 부분까지 탐색하는 문제를 해결하기 위해 max 변수를 선언하여 사용합니다. arr 배열에는 실제 수가 아닌 해당 index 수가 몇 번 나왔는지를 세어줍니다. 0부터 max까지의 수중 1개 이상의 갯수를 가진 index를 차례대로 출력해줍니다. => 위와 같은 방법으로 논리를 구성하여..
-
백준 1707 - 이분 그래프백준 algorithm 2020. 7. 9. 12:29
=>그래프 문제입니다. *** 논리는 나중에 정리하도록 하겠습니다. #include #include #include #include #include using namespace std; vector a[20001]; int color[20001]; bool dfs(int node, int c) { color[node] = c; for(int i=0; i> t; while(t>0) { int n,m; cin >> n>> m; for(int i=1; i u >>v; a[u].push_back(v); a[v].push_back(u); } bool ok = true; for(int i=1; i
-
백준 1697 -숨바꼭질백준 algorithm 2020. 7. 4. 13:50
#include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N, K; cin >> N >> K ; int dist[100001]={0}; bool check[100001];//갔다온지 확인하는 행렬 queue q; q.push(N); check[N] = true; while(!q.empty()) { int now = q.front(); if(now == K) { cout
-
백준 15781 - 헬멧과 조끼백준 algorithm 2020. 7. 4. 11:58
=>code만 올리겠습니다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N, M; cin >> N >> M; for(int i=0; i> tmp; a[i] = tmp; } for(int i=0; i> tmp; b[i] = tmp; } sort(a, a+N); sort(b, b+M); cout
-
백준 2960 - 에라토스테네스의 체백준 algorithm 2020. 7. 4. 11:50
=> 에라토스테네스의 체를 사용할 줄 아는지 묻는 문제입니다. => 실제로 소수를 구하는 것이 아닌 지워지는 것을 구하는 것이기 때문에 소수이더라도 지워진다고 생각하면 편합니다. => check 배열을 사용하여 문제를 해결할 수 있습니다. https://codingham.tistory.com/32 백준 2581 - 소수 에라토스테네스의 체를 사용하면 풀 수 있는 문제이다. 기본적인 알고리즘은 쉽게 짰었는데 제대로된 예외처리를 못해서 5번 넘게 틀렸다.... 2, 3, 5등은 소수인데 이 수들까지 소수가 아닌 것으� codingham.tistory.com => 이전에 푼 문제와 거의 비슷한 문제입니다. #include #include using namespace std; int main() { ios_ba..
-
백준 5585 - 거스름돈백준 algorithm 2020. 7. 4. 10:47
=> 단순 구현 문제입니다. pay = 1000 - pay를 실행한다. 큰 단위의 수로 거스름돈을 최대한 많이 채운다. 1까지 채운 이후의 동전 개수를 구한다. => 단순한 문제이기 때문에 이 이상 설명은 하지 않겠습니다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int yen[6]={500,100,50,10,5,1}; int pay; cin >> pay; pay = 1000-pay; int cnt=0; for(int i=0; i 0) { pay %= yen[i]; cnt += tmp; } } cout