전체 글 썸네일형 리스트형 6064번 6064번 - 카잉 달력 규칙을 찾아서 풀면 간단하게 풀 수 있는 문제였다. 처음에 나는 규칙을 찾았지만, 같은 규칙을 아주 복잡하게 구해서 문제를 푸는데 어려움을 겪었다. 규칙을 간단하게 말하면, 둘 중 하나의 숫자에 맞춰놓고, 칸을 옮겨가면서 있는지만 확인하면 된다. 이때 MAX값은 두 길이의 최소공배수가 된다. 그래서 최소공배수는 유클리드 호제법을 이용한 최대공약수를 이용해서 풀었다.(유클리드 스펠링이 사실 uclid 가 아님) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162#include#include using namespace std; .. 더보기 3055번 3055번 - 탈출 풀기전에 나름 쉬운문제라고 생각했는데, 여러 가지 명시해주지 않은 조건을 간과해서 수정을 여러번 했다. 일단 생각한 로직은 첫번째로 BFS를 통해서 물이 갈 수 있는 최단거리를 저장한다. 이때, D 나 X에는 갈 수 없다. 두번째로, BFS를 통해 비버가 갈 수 있는 최단거리를 저장한다. 이때, X 나 * 에는 갈 수 없다. 또한 비버는 물이 갈 수있는 시간보다 빠를때에만 그 칸으로 이동할 수 있다. 물과 같은 시간이나 그 이상 시간에 오면 물이 범람한다. 물이 갈 수 있는 경로는 초기값은 INF로 설정하고, 비버가 갈 수 있는 경로는 -1로 설정한다. 왜냐하면 물이 갈 수 없는 곳, X를 제외하고는 비버가 무조건 갈 수 있게 하기 위함이다. 또한 물이 여러곳에서 올 경우 , 최소거리.. 더보기 12851번 12851번 - 숨바꼭질2 처음에 나는 탐색하는 모든 정점을 큐에 계속 넣고, 답을 찾고, 답보다 깊은 곳에 도달하면 나와서 출력하도록 했다. 근데 이는 예상대로 너무 많은 정점이 큐에 들어가고, 메모리 초과가 발생했다. 그래서 다른 사람들 풀이를 보니까, 큐에서 pop 될때 방문 체크를 하면 된다고 했다.. 이해가 안갔다.. 왜 그런지는 설명이 없었다. 그래서 계속해서 생각해보다가, pop 될때 방문체크를 하면, 중복해서 큐에 들어갈 수 있고, 높이가 같은 것들은 모두 집어넣을 수있다. 다른 의문점 하나는, 혹시나 이미 체크된 정점에서 정답값이 나올 수 있지 않겠느냐였다. 하지만 이미 체크된 정점에서 나오는 값에서 정답이 나온다면, 무조건 깊이가 깊어지는 것이 분명하다. 예를 들어 1이라는 루트 노드에.. 더보기 scanf 사용법 http://egloos.zum.com/kjlife/v/2330173 감사합니다. 더보기 freopen 사용법 freopen 사용법▼▼▼▼▼▼▼http://gooddaytocode.blogspot.kr/2016/04/freopen.html freopen 사용했는데, waring 뜰때 해결법▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ http://revereve.tistory.com/2 더보기 9328번 9328번 - 열쇠 푸는데 3~4시간 정도 걸린 것 같다... 마치 BFS와 시뮬레이션 문제를 섞어놓은 듯했다.. 나한테는 일단 기본적인 로직은 , BFS를 계속 돌리면서 찾을 수 있는 열쇠랑, 문서를 다 찾는 것이다. 문제에서 기본맵의 바깥에서 들어오기 때문에, 가장 바깥쪽 테두리만을 검사하고 BFS를 수행하도록 2중 for문을 이용했다. 그럼 문제는 BFS를 몇번 돌리냐 인데, 나는 새로운 열쇠를 발견하면 BFS를 돌리도록 하였고, 찾지 못하면 더 이상 BFS를 돌리지 않았다. 열쇠를 찾느냐 마느냐는 updated 변수를 이용해서 나타냈다. 열쇠는 중복되지 않도록 map 을 이용해서 구현하였다. 그리고 열쇠를 찾거나, 열쇠를 통해서 문을 열수 있거나, 문서를 찾으면, 그 지역을 그냥 통과할 수 있는 .. 더보기 13549번 13549번 - 숨바꼭질3 이 문제는 각 점을 정점으로 하고, 가중치가 다르기 때문에 BFS가 아닌 다익스트라 알고리즘을 이용해서 풀 수 있다. 나는 우선 순위 큐를 이용한 다익스트라를 이용해서 문제를 풀었다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include#include#includeusing namespace std; const int INF = 987654321;int main(){ int n, k; scanf("%d%d", &n, &k); vector dist(100001, INF); priority_queue .. 더보기 13398번 13398번 - 연속합 2 고민하다가 결국 인터넷을 뒤적이며 점화식을 보고 문제를 풀었다. 인터넷에서 본 점화식에서는 n번째 원소를 선택한다 라는 설명이 없어서.. 처음에 많이 헤매다가 slack 에 물어보고 알아냈다. 일단 점화식은 D[n][0] = n번째 원소를 선택하고, 하나도 삭제하지 않고 얻은 수열의 최대값.D[n][1] = n번째 원소를 선택하고, 하나를 삭제하고 얻은 수열의 최대값. D[n][0] = max( D[n-1][0]+v[n-1] , v[n-1] )D[n][1] = max( D[n-2][0]+v[n-1], D[n-1][1] + v[n-1]) 라는 점화식으로 문제를 풀 수 있었다. 따라서 모든 D 배열을 비교해서 최대값을 찾아야 하낟. ##실수한 점 D에 음수가 들어갈 수 있을 때! .. 더보기 이전 1 ··· 30 31 32 33 34 35 36 ··· 61 다음