KDHzoot's Github

Code for study, project, etc

자세히보기

알고리즘 63

[백준 12842] 튀김 소보루

시간을 기준으로 1초씩 진행하며 구한다.현재 시간을 먹는 시간으로 나누었을 때 나누어 떨어지면 그때 그 사람이 소보루를 집어드므로 sum을 ++해준다.해주다가 먹은 소보루의 수와 같아지면 그때의 사람을 출력하면 된다. 그냥 다 해보면 된다. 12345678910111213141516171819202122232425262728#include #include using namespace std; int arr[100005];int n, s;int m; int main(void) { scanf("%d %d", &n, &s); scanf("%d", &m); for (int i = 0; i

알고리즘/PS 2018.05.23

[백준 12841] 정보대 등산

i번째 길을 건널 때, i를 0부터 n까지 탐색하면서 최소가 되는 i를 찾고 마지막으로 계산함최소를 찾을 때 i번째 횡단보도를 건너게 되면 전보다 a[i]만큼 더가지만 b[i]만큼 덜가므로a[i] - b[i] 값을 한번 탐색할 때 마다 sum에 누적시키면서 시작했을 때보다 상대적으로 건너는게 이득인지 계산(음수일 경우 이득, cross는 제외하고 생각)그리고 매번 cross값을 sum에 더하면 상대적인 비용을 알 수 있으므로 min값을 업데이트 하면서 index 저장 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include #define n_ 100005using namespace std..

알고리즘/PS 2018.05.23

[백준 14655] 욱제는 도박쟁이야!!

생각해보면 간단하다.중앙의 동전을 원하는 상태로 바꿔놓고 그 동전은 그대로 놔두고 좌우로 뻗어나가면서 다른 동전들도 똑같이 만들어 주면 된다.마지막에는 끝 동전 하나만 뒤집을 수 있으므로 항상 모든 수들의 절댓값의 총합 (+,-)로 뒤집을 수 있다.따라서 최대를 구하기 위해서는 입력되는 동전의 가치의 절댓값을 모두 더하면 된다. 1234567891011121314151617#include #include using namespace std; int main(void) { int n; long long sum = 0; cin >> n; for (int i = 0; i > a; sum += abs(a); } cout

알고리즘/PS 2018.05.21

[백준 14654] 스테판 쿼리

처음에 문제를 잘못 이해해서 이긴 사람은 자신이 낸 패를 그대로 계속 내는 문제인 줄 알았다.그래서 코드를 필요한 부분만 수정하느라 지저분해졌다.가위바위보의 승패를 쉽게 판단하기 위해 게임의 결과가 같으면 두 손패를 뺀 뒤 3으로 나눈 나머지가 같음을 이용했다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253#include #define mod 1000000009using namespace std; int arr[305];int brr[305]; int main(void) { int n, ans = 1, cnt = 0; cin >> n; for (int i = 0; i > arr..

알고리즘/PS 2018.05.21

[백준 14653] 너의 이름은

간단하게 q번째 메세지 아래 있는 사람들은 전부 q메세지를 읽었다. 추가로,q번째 메세지를 n명이 읽었다고 하면 그 위의 n명이 읽은 메세지도 q메세지를 읽었음을 알 수 있다. (카톡에서 눈치싸움 하다보면 알게된다.) 모든 사람이 봤을 경우 -1을 출력하는 것과 A는 대상에서 제외시키는 것만 유의하면 된다. 123456789101112131415161718192021222324252627282930313233343536373839#include #define mod 1000000009using namespace std; int arr[10005];int brr[10005];bool chk[30]; int main(void) { int n, k, q; cin >> n >> k >> q; for (int i..

알고리즘/PS 2018.05.21

[백준 1005] ACM craft

처음에 단순 BFS로 풀었는데 터졌다.위상정렬을 써야 한다고 한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include #include #include #define n_ 1000+5using namespace std; vector v[n_];int arr[n_];int ans[n_];int cnt[n_]; void solve(int now){ cnt[now]--; for (int i : v[now]){ ans[i] = max(ans[i], ans[now] + arr[now]); cnt[i]--; if (!cnt[i]){ solve(i); } }} int main(..

알고리즘/PS 2018.05.19