본문 바로가기

연습문제

(66)
[백준 java] 3197-백조의 호수 3197번: 백조의 호수 입력의 첫째 줄에는 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1500. 다음 R개의 줄에는 각각 길이 C의 문자열이 하나씩 주어진다. '.'은 물 공간, 'X'는 빙판 공간, 'L'은 백조가 있는 공간으로 나타낸다. www.acmicpc.net 1. 백조를 이동킨다 (BFS) 1-2. 두 백조가 만나면 while true 2. 빙하를 녹인다 우선 필드 크기와 필드의 모양을 입력받는다 입력을 마치면 for문으로 두마리 백조의 위치를 swan에 저장하고 만약 물이라면 meltQ에 추가시킨다 (얼음을 녹이기 위해) ( * 주의할점은 백조도 물로 취급하여 meltQ에 넣어줘야한다. (이것때문에 55%에서 계속 실패했다...) move에서는 첫번째 백조만 움직이는 방법으로 두번째 백..
[백준 java] 2669-직사각형 네개의 합집합의 면적 구하기 받은 숫자로 사각형을 그려 구현했다 import java.util.Scanner; public class B2669 { static int[][] data = new int[4][4]; static int[][] Board = new int[101][101]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); for(int i=0; i
[백준 java] 2668-숫자고르기 예제 입력 7 3 1 1 5 5 4 6 예제 출력 3 1 3 5 index의 목록과 board[index] 목록의 정렬값이 같아야 하는 문제 1 2 3 4 2 3 4 1 예를들어 index인 파란색 숫자와 값인 빨간색 숫자의 목록(정렬)은 [1 2 3 4] 와 [1 2 3 4] 같으므로 예제 4 4 3 2 1 은 맞는 값이다 위 조건을 만족시키려면 그래프가 이어져야 하고 다시 첫번째 index와 만나야한다 1>2 2>3 3>4 4>1 그래서 for문으로 1~N까지 index를 전송해주고 bfs에 따로 int first 로 저장해둔다 그리고 큐에 first를 넣어주고 while문으로 넘어간다 while문에서는 아직 방문하지 않은 index에 해당하는 값을 큐에 저장한다 만약 index에 해당하는 값이 아까..
[백준 java] 12100-2048(Easy) 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 1. 4방향 움직임이 가능하다 int[][] D = {{-1,0},{1,0},{0,-1},{0,1}}; //상하좌우 2. 두 블록 충돌하면 하나로 합쳐진다 새로운 좌표(이동하려는 좌표) nr cr 값이 r c 와 같다면 nr cr 좌표 값 * 2를 저장하고 r c 좌표값은 0으로 지정한다 3. 이미 이동한 블럭은 합쳐지지않는다 boolean으로 합쳐진 부분은 true처리 boolean이 false인곳만 합치게한다 4. 똑같은 수가 3개..
[백준 java] 2644-촌수계산 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 이전문제 2606 바이러스와 다른점은 해당 문제의 예제처럼 9 7 3 7 1 2 1 3 2 7 2 8 2 9 4 5 4 6 7 과 3의 촌수를 구하는 문제이므로 7-2 2-1 1-3 으로 3촌의 관계가 된다 아래 코드에서는 큐에 넣을때 카운터를 +1 해줘서 3이 들어갈때도 count+1이 된다 따라서 최종값 res에 -1을 해주면 촌수관계가 된다 import java.util.LinkedList; import java.util.Queue; i..
[백준 java] 2606-바이러스 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 각 노드의 관계를 그래프에 저장하고 1번 노드와 이어진 노드의 수를 계산하는 문제 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class B2606 { static int N,M; static int count = 0; static int[][] Graph; static boolean[] visited; public static void main(String[..
9205-맥주 마시면서 걸어가기 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 맨 처음 받는 숫자만큼 테스트를 실행하니 for문으로 bfs를 돌려준다. 시작위치와 도착위치를 각각 (sRow,sCol) (fRow, fCol) 로 지정하고 bfs의 while문에서 시작위치와 도착위치가 같아지면 while문을 끝내고 happy 저장 맥주를 마시고 거리 1000을 갈 수 있으니 두 Row값의 차와 Col값의 차가 1000을 넘기면 countinue로 건너뛰기 bfs의 while문 맨 처음에 시작위치와 끝 위치의 차이가 1000을 넘기지 않는..
1697-숨바꼭질 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 저번에 풀었던 스타트링크와 엄청 유사한 문제다 각각 N+1 N-1 N*2 이 조건문을 만족하면 큐에 넣어준다 그리고 bfs 상단의 if문으로 최단 거리를 구해준다 Node를 사용하지않고 while문을 통과할때마다 count++ 해주어 sout(count)를 해도 좋을 것 같다 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public clas..