문제 - 어떤 자연수 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..
문제 - 프린터 기기는 인쇄하고자 하는 문서를 인쇄 명령을 받은 순서대로, 즉 먼저 요청된 것을 먼저 인쇄(FIFO, First In First Out) - 상근이는 새로운 프린터기 내부 소프트웨어를 개발. 조건은 아래와 같음 1. 현재 Queue의 가장 앞에 있는 문서의 중요도 확인 2. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤로 3. 그렇지 않다면 바로 인쇄 - 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이 목표 해결방법 입력 받은 문서의 중요도와 인쇄 순서를 LinkedList에 저장하여 각 문서를 관리하도록 하였다. 처음 입력을 받으면서 M 번째에 있는 문서..
문제 - 주어진 숫자 M이상 N이하의 소수를 모두 출력 - 1
문제 - N개의 정수 A[1], A[2], ..., A[N]이 주어짐 - 이 안에 X라는 정수가 존재하는지 알아내는 것 - 모든 정수의 범위는 -2^31보다 크거나 같고 2^31보다 작음 고찰 처음에는 배열에 입력받은 것(input 배열)을 돌면서 입력받은 숫자가 있는지 돌아보도록 코드를 작성하였다. 더보기 import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int inputNum = Integer.parseInt(br...
문제 - 스택은 자료를 넣는(push) 입구와 자료를 뽑는(pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 LIFO(Last int First out) 특성을 가짐 - 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있음 - 스택에 push하는 순서는 반드시 오름차순을 지킴 - 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지 판단 - 만들 수 있다면 어떤 순서로 push와 pop 연산을 수행하는지 계산(push : + / pop : -) 해결방법 java의 stack 클래스를 사용하여 문제를 해결하였다. 스택에 push할 때, 이전에 push 되었던 수를 또 넣을 순 없기 때문에 이전에 넣었던 최대값을 저장해두고 그 값 이상의..