목록알고리즘 (54)
자바칩
난이도: Silver 1문제: https://www.acmicpc.net/problem/1926 문제어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다.입력첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m(1 ≤ m ≤ 500)이 차례로 주어진다. 두 번째 줄부터 n+1 줄 까지 그림의 정보가 주어진다. (단 그림의 정보는 0과 1이 공백을 두고 주어지며, 0은 색칠이 안된 부분, 1은 색칠이 된 부분을 의미한다)출력첫째 ..

난이도: Silver 1문제: https://www.acmicpc.net/problem/2583 문제에 주어진 모눈종이는 세로가 M, 가로가 N이지만코드를 작성할 때는 가로가 M, 세로를 N으로 배열을 초기화하자. => new int[N][M] 2차원 배열 초기화 방법:for (i: 왼쪽 아래 꼭짓점의 x좌표 ~ 오른쪽 아래 꼭짓점의 x좌표 - 1까지) for (j: 왼쪽 아래 꼭짓점의 y좌표 ~ 오른쪽 아래 꼭짓점의 y좌표 -1까지) paper[i][j] = 1; 그 이후는 BFS 알고리즘을 잘 알면 쉽게 풀 수 있다.영역을 체크할 때는 영역 체크 변수 cnt를 2로 초기화해서 새로운 칸에 방문할 때마다 cnt를 1씩 증가시키면 된다.그리고 마지막에 방문한 x좌표와 y좌표의 영역 크..

난이도: Gold 4문제: https://www.acmicpc.net/problem/13913 아래 링크에 있는 문제를 응용한 문제이다.이 문제를 먼저 풀어보고 해당 문제를 풀면 좀 더 쉽게 풀 수 있을 것이다.https://www.acmicpc.net/problem/1697 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간..

난이도: Gold 4문제: https://www.acmicpc.net/problem/14002 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 아래 링크에 있는 문제를 응용한 문제이다.이 문제를 먼저 풀어보고 해당 문제를 풀면 좀 더 쉽게 풀 수 있을 것이다.https://www.acmicpc.net/problem/11053 위 링크에 있는 문제에서 가장 긴 증가하는 부분 수열의 길이를 구하려면 int 타입의 1차원 dp 배열을 만들어서 저장하고, 가장 큰 값을 출력하면 됐었다.하지만 ..

난이도: Silver 1문제: https://www.acmicpc.net/problem/12852 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 아래 링크에 있는 문제를 응용한 문제이다.이 문제를 먼저 풀어보고 해당 문제를 풀면 좀 더 쉽게 풀 수 있을 것이다.https://www.acmicpc.net/problem/1463 위 링크에 있는 문제에서 연산을 하는 횟수의 최솟값을 구하려면 int 타입의 1차원 dp 배열을 만들어서 저장하고, 가장 큰 값을 출력하면 됐..
난이도: Silver 2문제: https://www.acmicpc.net/problem/3085 애니팡처럼 같은 종류가 모이면 그 종류들이 모인 개수를 최대 개수에 갱신하면 된다.다만 애니팡은 3개부터 모여야 하지만 여기에서는 2개가 모이는 것도 최대 개수로 갱신할 수 있다. 주석에 설명을 적어 놓았다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112..
난이도: Silver 2문제: https://www.acmicpc.net/problem/1138 주석에 써 놓은 설명만 보아도 이해가 될 것이다.바로 코드를 보자.123456789101112131415161718192021222324252627282930313233import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer; public class P1138_한줄로서기 { public static void main(String[] args) throws IOException { Bu..

난이도: Gold 4문제: https://www.acmicpc.net/problem/16234 이 문제는 같은 영역끼리 묶어서 그 영역의 인구수의 평균만큼 이동을 시켜야 한다.처음에는 영역 체크를 boolean 배열로 만들어서 조건에 해당하면 전부 true로 체크하여서 모두 같은 영역으로 처리하여 문제를 풀었는데, 그렇게 하면 안되고 영역 체크를 int 배열을 만들어서 국경선으로 구별하여 각각 다른 영역으로 처리해주어야 한다. 말로만 보면 이해가 안될 것이다. 그림을 보자. 초기 배열은 이렇다. 처음에는 국경선을 먼저 열어야 한다.국경선을 여는 조건은 인접한 칸(상, 하, 좌, 우)과의 인구 차이가 10명 이상 50명 이하일 경우이다. 인접한 칸과의 인구 차이가 10명 이상 50명 이하일 경우, 국경..