목록알고리즘/그래프 (57)
코딩공작소
일단 물고기를 잡아먹는데에 대한 우선순위가 존재한다. 그리고 문제를 읽고 든 생각은 최단거리이기 때문에 bfs로 탐색을 해주어야겠다고 생각했고, 최단거리를 계산해주어야 겠다고 생각했다 그 거기로 가는동안 가지못하는 길에대해서 조건을 걸어 길은 빼주어야겠다고 생각했다.(시뮬레이션) 과정과정마다 map을 찍으며 진행과정을 살펴본게 가장큰 도움이 되었던것 같다. 내 생각대로 돌아가지 않는거 같은 부분을 출력해보면 한 두가지 생각과 다르게 돌아가는 코드가 존재한다. 결과적으로 우선순위큐를 사용했는데 poll을 해주면서 우선순위대로 저장을 했다. 같은 과정을 반복할때는 재귀함수를 써주었고 언제 끝내게 되는지 return값을 잘 정해야 한다. 문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공..
https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음 www.acmicpc.net 이 문제를 읽었을 때는 시뮬레이션이라고 생각했다. 주어진 조건대로 그냥 코드를 짜면 된다고 생각했고 그 방법이 틀린 방법이 아니다..
문제의 키 포인트는 아래와 같다. 1. 벽을 어떻게 세울 것인가? 2. 바이러스를 어떻게 퍼뜨릴 것인가? 1을 해결하기 위해서는 완전 탐색을 이용해주었다. 재귀 함수를 이용해 벽을 설치/제거해 주었다. 2를 해결하기 위해서는 BFS를 사용해주었다. 어려운 문제는 아니었던 것 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293import java.awt.Point;import java.util.*; public class Main { s..
문제를 처음에 읽을 때는 시뮬레이션 문제인가 ..? 했었다. 먼저 입력포맷대로 코딩을 했다. 그리고 최대값을 구하는 문제라는 것을 보고 완전탐색으로 먼저 생각해보면서 최적화를 시켜보자라고 생각을 하였고 도형을 놓는 경우를 전부 다 따져보자하면서 생각을 해본 결과 도형의 대부분이 길이가 4인 dfs라는 것을 깨닫고 dfs문제 구나 !! 생각했다. 그 후, 뒤늦게 안 사실은 ㅏ,ㅓ,ㅜ,ㅗ 모양의 블록은 dfs로 탐색할 수 없다는 것(예외블록)을 알았다. 그리고 확인해본 결과 2차 배열의 각 모든 점에대해서 dfs를 따져서 최대값을 비교해야 한다는 것을 깨달았다. 한가지 배운 사실은 isV=True --> dfs --> isV=false 형식으로 해당 값에서만 isV유지하고 끝나면 다시 false로 초기화 시..
처음든생각 ) BFS로 무리무리의 개수를 세면 될거같다고 생각했고 많이 풀어보던 유형이어서 크게 어렵지 않았다. 저번에 배운 좌표일때의 Point 클래스를 사용하였다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371..
철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를 알고 싶어 한다. 토마토를 창고에 보관하는 격자모양의 상자들의 크..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 import java.util..