목록알고리즘/백준 (35)
자바칩

난이도: 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명 이하일 경우, 국경..

난이도: Gold 4문제: https://www.acmicpc.net/problem/2636 겉에 있는 치즈부터 녹여서 치즈를 점점 안쪽으로 녹이면 되는 문제이다. 초기 배열은 이렇다.세로(N) * 가로(M) 크기의 2차원 배열을 선언해주어야 한다. 치즈는 이렇게 겉에 있는 것만 녹이면 된다고 한다.나는 이 문제를 0주변에 있는 1들을 없애면 되는게 아닌가 했는데, 가운데에도 0이 있다.겉에 있는 0 주변에 있는 1들만 없애야 한다. 가운데에 있는 0은 제외하고 겉에 있는 0 주변에 있는 1을 없애야 한다.이렇게 하려면 어떻게 해야할까? 일단 공기 칸을 체크할 2차원 배열을 만든다.겉에 있는 0들을 bfs를 사용해서 공기 칸을 체크할 배열을 true로 체크하면 된다.그리고, true로 체크된 칸 주변..

난이도: Gold 4문제: https://www.acmicpc.net/problem/3190 머리를 늘리고 꼬리를 자르면 되는 문제이다.일단 뱀과 사과 정보를 저장할 2차원 배열을 만들자. 2차원 배열을 만들고 뱀의 몸이 있는 칸을 1, 사과가 있는 칸을 2로 설정해놓았다.뱀이 사과가 있는 칸에 도달하면 2가 있던 칸이 1로 바뀌고 점점 1의 개수가 늘어나게 된다.그리고, 이 게임이 몇 초 경과하고 끝이 나는지 계산할 second 변수를 만들었다. 사과가 없으면 1은 계속 그냥 이동하고, 사과가 있으면 2가 있던 칸을 1로 만들고 이동하면 된다.이렇게 하면 1이 점점 많아지게 된다.이 경우에는 9번 움직인 뒤 벽에 부딫쳐서 게임이 끝나므로 9초 뒤에 끝이 나게된다. 이 문제는 맨 앞에 요소를 추가..

난이도: Gold 5문제: https://www.acmicpc.net/problem/14503 다음과 같이 문제에 주어진 대로 그대로 구현하면 풀 수 있는 문제이다. 하지만 1번으로 돌아가라는데 1번이 3개다... 어느 1번으로 돌아가라는 건지 모르겠다.이것 때문에 푸는데 시간이 좀 걸렸다.질문 게시판에 좀 더 정확하게 작성되어있는 다른 사람이 올린 글을 찾아 보았다. 아.. 1번은 완전 맨 처음에 있는 1번이구나.... 잘못 풀고 있었네!! 하고 깨달아서 고쳤더니 바로 되었다.누가 이 글을 보고 암이 나았다 했는데 정말이다. 이 글을 보고 암이 나았다. 왜 안되나 했네.. 동서남북에 따라 가야할 방향은 다음과 같이 다르게 지정해주어야 한다.이렇게 그림을 그려놓으니까 코드를 더 편하게 작성할 수 있었..