본문 바로가기

연습문제/JAVA

(66)
2573-빙산 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 빙산이 녹아 빙산 덩어가 2개 이상이 되는데 까지 몇 년이 걸리는지 구하는 문제이다. 필드의 row col 입력받고, 필드의 빙산 값들을 받아준다. (0이면 물? 1이상이면 빙산) 빙산의 동서남북중 하나라도 물에 닿고있다면 닿고있는 물의 수만큼 마이너스 해준다. (0년차 - 입력값) 빙산들이 다 이어져있으니 1덩이 0 0 0 0 0 0 0 0 2 4 5 3 0 0 0 3 0 2 5 2 0 0 7 6 2 4 0 0 0 0 0 0 0 0 0 (1년차) 빙산들이..
5014-스타트링크 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 순서대로 전체층, 시작층, 목표층, 올라갈층, 내려갈층 를 입력받고 큐에 시작층과, 버튼을 누르지 않았으므로 0을 add후 while문을 돌려준다 방문하지 않은 층만 방문할수 있고, (층+올라갈층) 은 전체층을 넘기면 안되고 , (층-내려갈층) 은 1층 이상이어야 한다. 현재층이 목표층에 도달했으면 클릭 수를 리스트에 저장한다. while문이 끝나면 리스트에서 제일 작은 수를 꺼내서 출력 해당 층에 방문여부를 (층+올라갈층) 보다 늦게 검증해서 조금 틀렸다... packag..
14503-로봇청소기 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 청소기 위치와 방향(d), board를 입력받고 clear메소드로 넘어간다 clear에서 큐에 초기값을 넣고 for문을 돌리며 방향을 바꿔준다 (왼쪽으로 한번씩 총 4번) (if 바라보고 있는 방향이 북쪽이라면 서>남>동>북 순으로 탐색) d의 값은 0-북, 1-동, 2-남, 3-서 로 명시되어있다. 따라서 위치 배열도 북 동 남 서 순으로 지정했다. 로봇청소기가 청소를 했다면 search를 true로 바꿔주며 while문 안의 하단 if문에 걸리지 않는다 만약..
7569-토마토 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 높이 가로 세로를 입력받고 3차원 배열에 데이터를 넣다가 1(익은 토마토) 가 들어오면 해당 토마토를 큐에 넣어준다. 입력이 끝나면 너비우선탐색으로 토마토를 익히고 날짜를 더해주면서 진행 만약 익힌토마토를 만나면 날짜를 더하지 않고 바로 덜익은 토마토를 찾으러 간다 토마토 익히기를 끝내고 덜익은 토마토가 있으면 -1 if(res < temp.count) res= temp.count; 에서 구한 최대 날짜를 출력한다 원래 for문을 사용하여..
11724-연결 요소의 개수 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 그래프에 간선을 직접 넣지않고 [N+1][N+1] 그래프를 만들어 각 노드의 관계를 입력했다 for(int i=1; i 2 1 0 0 0 1 0 줄을 탐색하는것 첫번째 for문에서 1(시작)>2>5 를 탐색하고 res를 증가시키는것 두번째는 3(시작)>4>6 을 탐색후 res증가후 종료 (visited가 다 true) import java.util.LinkedList; import java.util.Q..
11724-연결 요소의 개수 (오답) 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 6 8 -> 정점의 수와 간선 1 2 2 5 5 1 3 4 4 6 5 4 2 4 2 3 그래프에 위 노드를 생성하고 [{1,2},{2,5}...] 방문했는지 확인하는 visited[간선] 를 만들었다 visited[M][M] 으로 만들지 않은 이유는 어자피 [0][0] 과 [0][1] 은 이어져있으니 같이 방문하기 때문에 for문을 돌면서 각 간선의 방문여부를 확인한다. 만약 방문안했다면 bfs에서 그..
2468-안전영역 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 쉬운문제인데 몇 번 틀렸다.. 알고보니 비가 오지 않는 경우도 계산해야 한다고 한다. 그래서 비의 범위를 0부터 100까지 계산한다. import java.util.*; public class B2468 { static int N; static int[][] Board; static boolean[][] visited; static int[][] D = {{-1,0},{1,0},{0,-1},{0,1}}; static class Node{ int row,col; Node..
2667-단지번호붙이기 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 1. move에서 방문하지 않은 단지를 찾는 후 bfs로 좌표를 넘긴다 2. bfs에서 해당 단지를 모두 탐색 후 단지 너비 반환 3. 반환한 너비를 ArrayList에 저장 후 다음단지를 찾는다. 반복 이전에 푼 문제와 비슷해서 쉽게 풀었는것 같다 package com.exam; import java.util.*; public class B2667 { static int N; static int[][] Board; static int[][] D = {{-1,0}..