목록algorithm (33)
connecting the dots
문제 www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 풀이 쉬운 탐색 문제 / dfs 에서 true or false를 리턴하도록 하니까 따로 섬의 개수를 세지 않아도 된다 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static BufferedReader in = new Buffer..
문제 풀이 처음에 문제를 잘 안 읽어서 틀렸다. 입력 받은 순서대로 회전 후 값을 출력하는 게 아니라 입력 받은 좌표 중에서 모든 순서대로 결과를 뽑은 다음에 그 중 최솟값을 출력하는 문제이다. 회전해야 할 좌표에 대한 정보 K개를 배열에 넣는다 회전 정보 K개 만큼의 순열을 생성해 어떤 순서로 회전할 지 정한다 만들어진 순열을 바탕으로 회전한다 배열 A의 값을 구한다 다시 3으로 돌아간다 모든 순열에 대해 배열 A의 값을 비교해 최솟값을 출력한다 배열을 회전할 때는 중간 좌표인 A[3][4]를 기준으로 S값 만큼 for문을 돌려 A[3-i][4-i] 부터 시작해 회전하도록 구현했다. 코드 import java.io.BufferedReader; import java.io.InputStreamReader;..
문제 www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 풀이 수행하는 회전 수를 기준으로 for문을 돌린다. 회전을 할 때마다 시작점을 (0, 0) , (1, 1) , .. (i, i)에서 시작하도록 해서 for문의 i를 이용할 수 있다. 이후에는 해당 범위를 벗어나면 방향이 달라지도록 해주면서 한 칸씩 수를 옮긴다 / 이 때 가장 처음 칸은 temp 등의 변수에 따..
문제 www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 풀이 주의해야 할 점은 이 컨베이어벨트는 위에서 바라본 방향이 아니라 옆에서 바라본 거라는 점이다. 정말 시키는 대로만 구현하면 되지만 처음에는 로직이 잘 이해가 안 가서 헤맸다. 컨베이어벨트는 다음의 순서를 반복한다. 벨트가 한 칸 회전한다. 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동한다. 만약 이동할 수 없다면 가만히 있는다. 로봇이..