목록백준 (170)
피너클의 it공부방
https://www.acmicpc.net/problem/2295 투포인터로 풀었다.int n;unordered_map visited;int arr[1001];int sum[1000001];int len = 0;선언 변수들이다. n = 1000 이므로 삼중 반복문을 돌리면 시간이 1000 ^ 3이 되어버려 제한시간안에 끝내지 못한다.그렇기에 이전에 arr에서 합을 따로 하나 구해놓을 것이다. 그것이 sum이다.visited는 sum안에 겹치는 숫자가 들어가지 않게 해준다.len은 sum의 길이다. cin >> n; for (int i = 0; i > arr[i]; } sort(arr, arr + n);값들을 입력받은뒤 정렬해준다. 반드시 정렬해줘야햔다. for (int..
https://www.acmicpc.net/problem/7785그냥 set을 이용해 구현하는 문제다.#include #include #include using namespace std;int n;set s;string a, b;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 0; i > a >> b; if (b == "enter") { s.insert(a); } else { s.erase(a); } } set::reverse_iterator iter; for (iter = s.rbegin(); iter != s.rend(); iter++) { cout 전체코드다. 들어와야 나갈수 있..
https://www.acmicpc.net/problem/9506 수학문제다.int n;bool b[50001];int arr[50001];int len;n은 입력받는 숫자이고b는 약수인지 아닌지 기록하는 bool배열arr은 약수가 담기는 배열, len은 arr의 길이다. while (true) { cin >> n; if (n == -1) break; for (int i = 2; i 미리 세팅을 해둔다.for (int i = 2; i n/2까지만 반복문을 돌리며 만약 n이 i로 완전히 나누어떨어지고 약수로 체크가 되지 않았다면i와 n를 i로 나눈 수를 기록해주고 arr에 둘다 기록해준뒤 sum에 더해준다.arr[len] = 1;len += 1;sort(arr, arr + len);반복문에서 나오면 ..
https://www.acmicpc.net/problem/32684 그냥 구현문제다.#include using namespace std;double co, ek;int main(){ int a, b, c, d, e, f; cin >> a >> b >> c >> d >> e >> f; co = a * 13 + b * 7 + c * 5 + d * 3 + e * 3 + f * 2; cin >> a >> b >> c >> d >> e >> f; ek = a * 13 + b * 7 + c * 5 + d * 3 + e * 3 + f * 2 + 1.5; if (co > ek) cout
https://www.acmicpc.net/problem/11005구현문제다. 10진수로 64823이 있다라 해보자. 우리는 이걸 어떻게 10진수로서 보고있을까64823을 10으로 나눴을때 나머지는 3이다. 그럼 6482가 남는다.6482를 10으로 나눴을때 나머지는 2이다. 그럼 648이 남는다.648를 10으로 나눴을때 나머지는 8이다. 그럼 64이 남는다.64를 10으로 나눴을때 나머지는 4이다. 그럼 6이 남는다.6를 10으로 나눴을때 나머지는 6이다. 그럼 0이 남는다. 우리는 이렇게 보고있다.예제를 봐보자 60466175 이 숫자를 36으로 나눴을때 나머지는 35이다. 그럼 1679615이 남는다.1679615 이 숫자를 36으로 나눴을때 나머지는 35이다. 그럼 46655이 남는다.이를 반복..
https://www.acmicpc.net/problem/2745구현문제다. 진법을 어떻게 변화시키냐 이게 문제인데 이진수와 십진수를 예로 들어보자이진수 10101 이 있다고 했을때 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 인 것은 알것이다. 십진수 56473 이 있다고 했을때는5 * 10^4 + 6 * 10^3 + 4 * 10^2 + 7 * 10^1 + 3 * 10^0 인것도 알것이다. 그럼 예제에 나온 ZZZZ는 어떻게 해야할까?Z가 35라고 나왔으니 위에와 똑같이 만들면1 * 35^3 + 1 * 35^2 + 1 * 35^1 + 1 * 35^0 이다. 이를 코드로 짜면 된다.string n;int b;long long sum = 0;n과 b는 입력받..
https://www.acmicpc.net/problem/26042 queue를 이용한 구현문제다.int n;queue q;int a, b;int m = 0, l = 987654321;a, b는 입력받는 정보고m은 최대 학생수이고l은 최대 학생일때 번호 가장 작은 학생이다. cin >> n; while (n-- > 0) { cin >> a;값을 입력받고 if (a == 1) { cin >> b; q.push(b); if (q.size() > m) { m = q.size(); l = b; } else if (q.size() == m) { if (l > b) l = b; } }1을 입력받으면 다시 학생 번호 (b) 를 입력받는다.q에 b를 넣고만약 q의 크기가 m보..
https://www.acmicpc.net/problem/31926일단 daldidalgo를 만드는데ddadaldalddaldidaldidaldaldidalgdaldidalgo총 8의 시간이 걸린다.그리고 daldidan을 만들때는 무조건 앞에 daldidalgo이 있는 경우이기 때문에 daldidalgo에서 daldida를 가져와서daldidadaldidan총 2의 시간이 걸린다. n = 1의 경우daldidalgo를 만드는데 8daldidan을 만드는데 2 총 10의 시간이 걸린다. n = 2의 경우에는daldidalgo를 만드는데 8daldidalgo를 앞에서 복사해서 1daldidan을 만드는데 2 총 11의 시간이 걸린다. 그런데 n = 3의 경우daldidalgo을 만드는데 8daldidalg..
https://www.acmicpc.net/problem/32651단순 구현 문제다.#include #include using namespace std;int n;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; if (n > 100000) cout 전체코드다.
https://www.acmicpc.net/problem/32642구현문제다.int n;long long ans = 0;long long angry = 0;변수는 long long으로 설정해준다. 문제에서 권장해줬다.cin >> n;int b;for (int i = 0; i > b; if (b == 1) angry += 1; else angry -= 1; ans += angry;}그리고 그냥 값 입력받으면서1을 입력받으면 화가났으니 angry + 1을 해주고 아니면 화가 줄어들었으니 angry - 1을 해준다.그후 ans에 angry를 더하면 된다.#include #include using namespace std;int n;long long ans = 0;long long angry = 0;int ma..