문제 - 이 아파트에는 "a층의 b호에 살려면 자신의 아래 (a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살야아 한다."는 계약 조건이 있음 - 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지킴 - 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력 - 아파트는 0층부터 있고 각 층에는 1호부터 있으며, 0층의 i호에는 i명이 살고 있음 해결방법 문제에서 설명하는 것처럼 "a층의 b호에 살려면 자신의 아래 (a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살야아 한다."를 만족시키려면 0층과 1호에는 기본적으로 값(0층엔 호수대로, 1호엔 무조건 1명)을 세팅해준 뒤 나머지에 값을 채워야 한다. 문제에 제시된 대로 식을..
문제 - 두 개의 자연수(10,000이하의 자연수) 입력 - 최대공약수와 최소공배수 출력 해결방법 유클리드 호제법을 이용하여 두 개의 자연수에 대한 최대공약수를 구하였다. 유클리드 호제법의 원리는 다음과 같다. 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라고 한다면, a, b의 최대공약수와 b, r의 최대공약수는 같다. 이 성질에 따라서 a를 b로 나눈 나머지 r을 구하고, b를 r로 나눈 나머지를 구한다. 나머지가 0이 될 때 나눈 수가 a, b의 최대공약수가 된다. 최소공배수는 "(a * b) / 최대공약수"로 구할 수 있다. 코드 import java.io.*; import java.util.*; class Main{ public static void main(String[] args) ..
문제 - 육각형으로 이루어진 벌집에는 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매김 - 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지 출력 - 시작과 끝 방을 포함한 개수를 출력 해결방법 문제에 주어진 그림을 보면 어렵지 않게 규칙을 찾을 수 있다. 중앙에 위치한 1은 통과해야 하는 벌집의 개수가 1개이고, 그 다음 6개의 벌집은 2개를 통과해야 하고, 그 다음 12개의 벌집은 3개를 통과해야 한다. 즉, 통과해야 하는 벌집의 개수가 1개씩 늘어날 때마다 위치할 수 있는 벌집은 6개씩 늘어나는 것을 알 수 있다. 코드 import java.io.*; import java.util.*; class M..
문제 - 어떤 자연수 N이 있을 때, 그 자연수의 분해합은 N과 N을 이루는 각 자리수의 합 - 어떤 자연수 M의 분해합이 N인 경우, M은 N의 생성자 - 어떤 자연수의 경우에는 생성자가 없을 수도 있음 - 생성자가 여러 개인 자연수도 있을 수 있음 - 자연수 N이 주어졌을 때, N의 가장 작은 생성자 출력 - 생성자가 없는 경우에는 0 출력 해결방법 1부터 주어진 자연수까지 숫자를 1씩 증가시키면서 분해합을 구하는 방식으로 코드를 작성하였다. 분해합을 구할 때에는 각자리 수를 더해주기 위해서 나머지 연산, 나누기 연산을 활용하였고, 연산이 끝나면 해당 숫자를 또 더해줘 분해합을 구한 뒤 해당 숫자가 생성자인지 확인할 수 있도록 하였다. 코드 import java.io.*; import java.uti..
문제 - 1부터 N까지의 번호가 붙은 N장의 카드 - 카드는 1번부터 N번까지 순서대로 놓여 있음 - 카드가 한 장 남을 때까지 아래 내용 반복 1. 제일 위에 있는 카드 버리기 2. 그 다음 제일 위에 있는 카드 제일 아래 있는 카드 밑으로 옮기기 - 제일 마지막에 남게 되는 카드 출력 해결방법 queue에 순서대로 카드를 넣고, 맨 위 카드는 버리고 그 다음 카드를 맨 뒤로 다시 넣는 과정을 반복하였다. 카드가 한 장 남았을 경우에는 해당 카드를 출력할 수 있도록 하였다. 코드 import java.io.*; import java.util.*; class Main{ public static void main(String[] args) throws Exception { BufferedReader br ..
문제 - N은 홀수 - N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램 1. 산술평균 : N개의 수들의 합을 N으로 나눈 값 2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값 4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이 - 산술평균은 소수점 이하 첫째 자리에서 반올림한 값을 출력 - 최빈값이 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력 해결방법 1. 산술평균 - 숫자들을 입력 받으면서 sum 변수를 두어 모든 합을 저장해두고 sum을 주어진 입력의 개수로 나누어 평균을 구할 수 있도록 하였다. 이 때, 소수점 이하 첫째 자리에서 반올림한 값을 출력하라고 하여 Math.roun..