목록Java (44)
시간이 NullNull
고슴도치는 물이 찰 예정인 칸으로 이동할 수 없다. 즉, 다음 시간에 물이 찰 예정인 칸으로 고슴도치는 이동할 수 없다. 이동할 수 있으면 고슴도치가 물에 빠지기 때문이다. 이 문제의 포인트는 위의 문장이라고 생각이 들었다. 그렇다면 같은 시간에는 물이 먼저 이동하고 그 뒤에 고슴도치가 이동한다고 다르게 생각할 수도 있다고 생각하였고 물이 먼저 움직인 후에 고슴도치가 움직이면 되겠다고 생각하였다. 1. 한 사이클당 물이 한번 번진다.2. 한 사이클당 고슴도치가 한번 움직인다.2-1. 고슴도치가 못 움직이게 되면( 빠지는 경우 포함 ) 더이상 Queue에 다시 넣을 노드가 사라지게 됨으로 종료3. 도착하면 그때 몇 사이클 움직이게 되었는지 파악하여 결과값 출력 물의 좌표와 고슴도치의 좌표를 각각 Queue..
N이 주어질 때, 두 사람이 최선을 다해 게임을 한다면 어떤 사람이 이기게 되는지 출력하는 프로그램을 작성하라. 이 문제에서 가장 힘들었던 점이 최선을 다해 게임을 한다면 이었다. 처음에 모든 경우를 종이에 적어 구해보았는데 숫자가 작은 수부터 시작한다면 경우의 수가 너무 많아지고 계산식이 복잡해 지는 것을 확인하고 역으로 N부터 시작해보았다. 예를 들어 N이 100일때 1. 내가 이기기 위해서는 다음 사람이 무조건 100 "초과" 하는 숫자를 부르게 해야함으로 내가 51 을 부르면 다음 사람은 최소 102를 부르게 되므로 무조건 이길 수 있다. 2. 반대로 그렇다면 나의 상대는 내가 51을 부를 수 없도록 24라는 숫자를 불러 내가 최대 49의 숫자를 부를 수 밖에 없게 만든다. 이 두가지를 반복하게 ..
[제약 사항] 1. 시간 제한 : 최대 50개 테스트 케이스를 모두 통과하는 데 C/C++/Java 모두 3초 2. 지도의 한 변의 길이 N은 3 이상 8 이하의 정수이다. (3 ≤ N ≤ 8) 3. 최대 공사 가능 깊이 K는 1 이상 5 이하의 정수이다. (1 ≤ K ≤ 5) 4. 지도에 나타나는 지형의 높이는 1 이상 20 이하의 정수이다. 5. 지도에서 가장 높은 봉우리는 최대 5개이다. 6. 지형은 정수 단위로만 깎을 수 있다. 7. 필요한 경우 지형을 깎아 높이를 1보다 작게 만드는 것도 가능하다. 이 문제에서 주목해야 할 점은 "지도의 한 변의 길이 N은 3이상 8이하의 정수이다." 와 "최대 공사 가능 깊이 K는 1이상 5이하의 정수이다." 이다. 이 점을 가지고 생각해보면 가장 큰 지도 인..
첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. (3 ≤ N, M ≤ 8)둘째 줄부터 N개의 줄에 지도의 모양이 주어진다. 0은 빈 칸, 1은 벽, 2는 바이러스가 있는 위치이다. 2의 개수는 2보다 크거나 같고, 10보다 작거나 같은 자연수이다.빈 칸의 개수는 3개 이상이다. 라는 문구가 가장 먼저 눈에 띄었고 N이 8이하 벽은 3개 라는 것에 착안점을 두어 3중 for문으로 벽을 세울 인덱스를 정한뒤 바이러스가 퍼지도록 bfs를 하여 그 때 남은 0의 갯수를 세어 확인하였다. 3중 for문을 작성할때 ( 3개의 점을 고를때 ) 같은 점을 찍지 않도록 그리고 0인점만 골라 벽을 세울 수 있도록 다음과 같이 작성하였다.첫번째 for문 기준으로 idx / M(가로크기) 는 일반적인 배열의 i ..