목록알고리즘 (54)
자바칩

난이도: Gold 4문제: https://www.acmicpc.net/problem/2636 겉에 있는 치즈부터 녹여서 치즈를 점점 안쪽으로 녹이면 되는 문제이다. 초기 배열은 이렇다.세로(N) * 가로(M) 크기의 2차원 배열을 선언해주어야 한다. 치즈는 이렇게 겉에 있는 것만 녹이면 된다고 한다.나는 이 문제를 0주변에 있는 1들을 없애면 되는게 아닌가 했는데, 가운데에도 0이 있다.겉에 있는 0 주변에 있는 1들만 없애야 한다. 가운데에 있는 0은 제외하고 겉에 있는 0 주변에 있는 1을 없애야 한다.이렇게 하려면 어떻게 해야할까? 일단 공기 칸을 체크할 2차원 배열을 만든다.겉에 있는 0들을 bfs를 사용해서 공기 칸을 체크할 배열을 true로 체크하면 된다.그리고, true로 체크된 칸 주변..

난이도: Gold 4문제: https://www.acmicpc.net/problem/3190 머리를 늘리고 꼬리를 자르면 되는 문제이다.일단 뱀과 사과 정보를 저장할 2차원 배열을 만들자. 2차원 배열을 만들고 뱀의 몸이 있는 칸을 1, 사과가 있는 칸을 2로 설정해놓았다.뱀이 사과가 있는 칸에 도달하면 2가 있던 칸이 1로 바뀌고 점점 1의 개수가 늘어나게 된다.그리고, 이 게임이 몇 초 경과하고 끝이 나는지 계산할 second 변수를 만들었다. 사과가 없으면 1은 계속 그냥 이동하고, 사과가 있으면 2가 있던 칸을 1로 만들고 이동하면 된다.이렇게 하면 1이 점점 많아지게 된다.이 경우에는 9번 움직인 뒤 벽에 부딫쳐서 게임이 끝나므로 9초 뒤에 끝이 나게된다. 이 문제는 맨 앞에 요소를 추가..

난이도: Gold 5문제: https://www.acmicpc.net/problem/14503 다음과 같이 문제에 주어진 대로 그대로 구현하면 풀 수 있는 문제이다. 하지만 1번으로 돌아가라는데 1번이 3개다... 어느 1번으로 돌아가라는 건지 모르겠다.이것 때문에 푸는데 시간이 좀 걸렸다.질문 게시판에 좀 더 정확하게 작성되어있는 다른 사람이 올린 글을 찾아 보았다. 아.. 1번은 완전 맨 처음에 있는 1번이구나.... 잘못 풀고 있었네!! 하고 깨달아서 고쳤더니 바로 되었다.누가 이 글을 보고 암이 나았다 했는데 정말이다. 이 글을 보고 암이 나았다. 왜 안되나 했네.. 동서남북에 따라 가야할 방향은 다음과 같이 다르게 지정해주어야 한다.이렇게 그림을 그려놓으니까 코드를 더 편하게 작성할 수 있었..

난이도: Gold 5문제: https://www.acmicpc.net/problem/15686 N의 크기는 50으로 작다.하지만 N의 크기가 작다고 이중 for문을 돌려버리면 시간 초과가 떠버린다.이중 for문은 시간복잡도가 O(n^2)이니까 50 * 50 = 2500이면 충분하지 않은가? 라고 생각할 수도 있지만 절대 그렇지 않다. 이중 for문을 사용하면 시간 복잡도는 생각보다 어마어마하다.M의 개수는 최대 13개. 즉, dfs로 13번 파고들면 이중 for문을 13번이나 돌려야 한다.즉, for (1~50) for (1~50) for (1~50) for (1~50) for (1~50) ..

난이도: Gold 4문제: https://www.acmicpc.net/problem/14502 세로: N, 가로: M인 N * M 행렬이 있다. 3개의 벽(1)을 임시로 둔다. 바이러스(2)가 벽(1)을 제외하고 상하좌우로 퍼진다. 바이러스가 퍼지지 않은 구역은 남은 0의 개수를 세어 보면 된다.총 27개가 나온다. 바이러스가 최소한으로만 퍼지게, 즉 안전 영역의 개수가 최대한 많게 3개의 벽을 세워야 한다. N, M의 최대 개수가 8인 것을 보면 시간 복잡도에 전혀 영향을 끼치지 않는다.벽을 3번 세우려면 최소 6중 for문을 돌려야 할 것 같은데,8 * 8 * 8 * 8 * 8 * 8 = 262,144인 것을 보면 정말 시간 복잡도를 신경 쓰지 않아도 된다. 3개의 벽을 세우기 위해서는 브루..

난이도: Silver 1문제: https://www.acmicpc.net/problem/2468 '그 크기가 최대인 영역'처음에는 이게 무슨 말인지 이해가 안 돼서 여러번 읽어봤다. 도대체 어떻게 세어야 저게 5개가 되는거지...? 왼쪽 아래꺼만 세어도 7개인데..? 하면서 답답해 하다가혹시나 나처럼 이해가 안 되는 사람이 있나 해서 질문 게시판을 뒤져 보았다. 고수님들이 답변을 해주신 것을 보고 드디어 이해를 하였다.그리고 문제 텍스트를 작성한 사람을 약간 원망하였다.. 좀 이해되기 쉽게 써주지.. 하면서 ..ㅋㅎㅋㅋ 자 그러면 이제 이해했으니 문제를 풀어나가야겠다! 높이가 4 이하인 모든 지점이 물에 잠긴 경우, 분홍색: 물에 잠기는 지점 파란색: 물에 잠기지 않는 안전한 영역 "인접한 영..