목록Algorithm (182)
miinsun
💬 문제 설명 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 🔨 입출력 예 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 예제 입력 1) 5 3 4 1 1 1 -1 2 2 3 3 예제 출력 1) 1 -1 1 1 2 2 3 3 3 4 💻 Main.java 아래 게시글과 같은 문제 Comparable 인터페이스를 상속받아 compareT..
💬 문제 설명 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 1. 이친수는 0으로 시작하지 않는다. 2. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다. N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오. 🔨 입출력 예 입력 첫째 줄에 N이 주어진다. 출력 첫째 줄에 N자리 이친수의 개수를 출력한다. 예제 입력 1)..
💬 문제 설명 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. * 1+1+1+1 * 1+1+2 * 1+2+1 * 2+1+1 * 2+2 * 1+3 * 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 🔨 입출력 예 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력 1) 3 4 7 10 예제 출력 1) 7 44 274 💻 Main.java DP를 이용해 문제를 푼다. 각각의 ..
💬 문제 설명 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 🔨 입출력 예 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1) 2 예제 출력 1) 3 예제 입력 2) 8 예제 출력 2) 171 예제 입력 3) 12 예제 출력 3) 2731 💻 Main.java DP를 이용해 문제를 푼다. 각각의 연산의 방법을 dy[n]에 저장한다. 타일의 방법의 수를 구하는 규칙은 다음과 같다. dy[i] = dy[i-1] + 2 * dy[i-2] dy[0]과 dy[1], dy[2..
💬 문제 설명 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 🔨 입출력 예 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1) 2 예제 출력 1) 2 예제 입력 2) 9 예제 출력 2) 55 💻 Main.java DP를 이용해 문제를 푼다. 각각의 연산의 방법을 dy[n]에 저장한다. 타일의 방법의 수를 구하는 규칙은 피보나치 공식과 같다 dy[0]과 dy[1], dy[2]를 설정해준다. /* 백준 DP - 11726 :: 2xn 타일링 */ import ..
💬 문제 설명 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. * X가 3으로 나누어 떨어지면, 3으로 나눈다. * X가 2로 나누어 떨어지면, 2로 나눈다. * 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 🔨 입출력 예 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 예제 입력 1) 2 예제 출력 1) 1 예제 입력 2) 10 예제 출력 2) 3 Hint ) 10의 경우에 10 -> 9 -> 3 -> 1 로 3번 만에 만들 수 있다. 💻 Main.java DP를 이용해 문제를 푼다. 각각의 연산..
💬 문제 설명 N개의 자연수로 이루어진 수열이 주어졌을 때, 그 중에서 가장 길게 증가하는(작은 수에서 큰 수로) 원소들의 집합을 찾는 프로그램을 작성하라. 예를 들어, 원소가 2, 7, 5, 8, 6, 4, 7, 12, 3 이면 가장 길게 증가하도록 원소들을 차례대로 뽑아내면 2, 5, 6, 7, 12를 뽑아내어 길이가 5인 최대 부분 증가수열을 만들 수 있다. 🔨 입출력 예 입력 첫째 줄은 입력되는 데이터의 수 N(3≤N≤1,000, 자연수)를 의미하고, 둘째 줄은 N개의 입력데이터들이 주어진다. 8 5 3 7 8 6 2 9 4 출력 첫 번째 줄에 부분증가수열의 최대 길이를 출력한다. 4 💻 Solution.java dy[i]에는 arr[i]보디 값이 작으면서 max값이 가장 큰 값을 선택한다. ..
💬 문제 설명 철수는 학교에 가는데 개울을 만났습니다. 개울은 N개의 돌로 다리를 만들어 놓았습니다. 철수는 돌 다리를 건널 때 한 번에 한 칸 또는 두 칸씩 건너뛰면서 돌다리를 건널 수 있습니다. 철수가 개울을 건너는 방법은 몇 가지일까요? 🔨 입출력 예 입력 첫째 줄은 돌의 개수인 자연수 N(3≤N≤35)이 주어집니다. 7 출력 첫 번째 줄에 개울을 건너는 방법의 수를 출력합니다. 34 💻 Solution.java 이전 문제 '계단 오르기'와 유사 개울의 시작과 끝을 0, n + 1로 추가하자 리턴 받아야 하는 값은 dy[n + 1] /* 돌다리 건너기 :: Dynamic Programming */ import java.util.*; public class Main { static int [] d..