티스토리 뷰
참고: 이데일리 코딩 챌린지 기출 문제 자료실 https://coding.edaily.co.kr/bbs/board.php?bo_table=question
[1 문제내용] 피보나치 수열에서의 특정한 항은 앞의 두 항을 더하여 계산합니다. 이 때 첫 번째 항과 두 번째 항은 1이며, 세 번째 항부터는 이전의 두 항을 더하여 나타냅니다. 예를 들어 첫 번째 항부터 일곱 번째 항까지를 나열하면 다음과 같습니다. 1, 1, 2, 3, 5, 8, 13... 자연수 N이 주어졌을 때, N번째 피보나치 수를 출력하는 프로그램을 작성하세요. [입력조건] 첫째 줄에 자연수 N이 주어집니다. (1 <= N <= 35) [출력조건] N번째 피보나치 수를 출력합니다. [입력예시 1] 3 [출력예시 1] 2 [입력예시 2] 8 [출력예시 2] 21 [풀이]
public static void main(String[] args) {
System.out.println("N번째 피보나치 수에서 N을 입력하세요.(1 <= N <= 35)");
Scanner sc = new Scanner(System.in); //입력객체 생성
int n = sc.nextInt(); //키보드 입력 정수값
int[] fibonacci = new int[n+1]; //피보나치 수열 배열 n개의 방
fibonacci[0] = 1;
fibonacci[1] = 1;
for(int i=0; i+2 < n; i++) {
fibonacci[i+2] = fibonacci[i+1] + fibonacci[i];
}
System.out.println(fibonacci[n-1]); //N번째 피보나치 수를 출력
}
[2 문제내용]
은진이는 심심할 때마다 달력을 보는 습관이 있습니다.
달력을 보는 습관 때문에 어느 순간 달력과 물아일체가 된 은진이는 모든 년도에 대한 달력을 통째로 외워버렸습니다.
우리는 은진이를 능가하기 위해 년도와 월이 주어졌을 때 해당 월의 마지막 일자를 출력하는 프로그램을 만들고자 합니다.
예를 들어 2018년 10월이라는 입력이 들어왔을 때 31일이라는 값을 출력해야 합니다.
[입력조건]
년도와 월이 입력됩니다. 이 때 년도는 항상 1보다 크거나 같고 10,000보다 작거나 같은 정수입니다.
[출력조건]
해당 년도 및 해당 월의 마지막 일자를 출력합니다.
[입력예시 1]
2018 10
[출력예시 1]
31
[입력예시 2]
2012 2
[출력예시 2]
29
[풀이]
public static void main(String[] args) {
System.out.println("년도와 월을 입력하시오.입력 순서대로 공백을 기준으로 구분되어 정해집니다."
+ "\n" + "년도는 항상 1보다 크거나 같고 10,000보다 작거나 같은 정수입니다.");
Scanner sc = new Scanner(System.in); //입력객체 생성
String input = sc.nextLine(); //키보드 입력 정수값
String inputArr[] = input.split(" ");
int year = Integer.parseInt(inputArr[0]);
int month = Integer.parseInt(inputArr[1]);
int day = 1;
Calendar cal = Calendar.getInstance(); //캘린더 객체 생성
cal.set(year, month-1, day); //월은 -1해줘야 해당월로 인식
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 특정월의 마지막 날짜
System.out.println(lastDay);
}
[3 문제내용]
일반적으로 두 소수의 곱을 A라고 할 때 A를 보고 역으로 두 소수를 유추해내는 것은 굉장히 어려운 것으로 알려져 있습니다.
이러한 성질은 암호학에서 다방면으로 활용되고 있습니다.
다만 두 소수의 곱 A가 충분히 크지 않은 숫자라면 역으로 두 소수를 유추해내는 것은 어려운 일이 아닙니다.
따라서 어떠한 숫자 A가 주어졌을 때
두 소수의 곱으로 나타낼 수 있으면 두 소수를 오름차순으로 출력하고, 나타낼 수 없으면 IMPOSSIBLE을 출력하는 프로그램을 작성하세요.
[입력조건]
첫째 줄에 정수 A가 주어집니다. (1 <= A <= 10,000,000)
[출력조건]
정수 A를 두 소수의 곱으로 나타낼 수 있으면
두 숫자를 오름차순으로 출력합니다.
가능한 소수의 쌍이 많은 경우 가장 작은 소수와의 곱을 출력합니다.
만약 정수 A를 두 소수의 곱으로 나타낼 수 없다면 IMPOSSIBLE을 출력합니다.
[입력예시 1]
15
[출력예시 1]
3 5
[입력예시 2]
20
[출력예시 2]
IMPOSSIBLE
[입력정답 확인용 1]
5984085
[출력정답 확인용 1]
IMPOSSIBLE
[입력정답 확인용 2]
4000
[출력정답 확인용 2]
IMPOSSIBLE
[입력정답 확인용 3]
1699847
[출력정답 확인용 3]
17 99991
[입력정답 확인용 4]
499385
[출력정답 확인용 4]
5 99877
[입력정답 확인용 5]
4337256
[출력정답 확인용 5]
IMPOSSIBLE
[풀이]
/**
* 소수는 약수가 1과 자신뿐인 수. 1은 소수가 아니다.
* a x b = N
* a = 2, 3, 4... (N % a = 0)일때 a는 소수인가
* a가 소수가 아니면 바로 IMPOSSIBLE을 출력
* a가 소수면 b는 소수인지 체크
* b가 소수이면 a와 b 두 소수를 오름차순으로 출력
*/
int a;
int b = 0;
System.out.println("정수 N을 입력하세요. (1 <= N <= 10,000,000)");
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
boolean a_isPrime = false; // a 소수 구분자(소수=ture)
boolean b_isPrime = false; // b 소수 구분자(소수=ture)
for (a=2; a<N; a++) {
if(N%a == 0) {
for (int i=2; i<a; i++) { //a가 1과 자신을 제외하고, 자신보다 작은 수로 나누어지면 소수가 아니다.
if(a%i == 0) {
a_isPrime = false;
break;
} else {
a_isPrime = true;
}
}
if(a_isPrime) {
b = N / a;
for (int i=2; i<b; i++) { //b가 1과 자신을 제외하고, 자신보다 작은 수로 나누어지면 소수가 아니다.
if(b%i == 0) {
b_isPrime = false;
break;
} else {
b_isPrime = true;
}
}
if(a_isPrime && b_isPrime) {
System.out.println("a=" + a + ", b=" + b);
break;
}
}
}
}
if(!(a_isPrime && b_isPrime)) {
System.out.println("IMPOSSIBLE");
}
[4 문제내용]
로또왕 산이는 매주 로또를 구입합니다.
매주 로또를 구입하다 보니 자신이 선택한 로또 번호와 당첨 번호를 매칭하는 것도 귀찮은 일이 되어버렸습니다.
그래서 산이는 당첨 번호 및 보너스 번호와 자신의 로또 번호가 주어졌을 때
당첨 여부를 빠르게 확인하는 프로그램을 작성하고자 합니다.
당첨번호는 6개, 보너스 번호는 1개가 주어지며 산이가 선택한 로또 번호는 총 6개입니다.
로또의 당첨 여부를 판별하는 로직은 다음과 같습니다.
1등: 당첨번호가 6개 모두 일치할 때
2등: 당첨번호 5개와 보너스 번호가 일치할 때
3등: 당첨번호 5개가 일치할 때
4등: 당첨번호 4개가 일치할 때
5등: 당첨번호 3개가 일치할 때
이외의 모든 경우는 꽝으로 분류합니다.
[입력조건]
첫째 줄에 로또의 당첨번호 6개 및 보너스 번호가 공백을 기준으로 주어집니다.
이 때 각 번호는 1보다 크거나 같고 45보다 작거나 같은 정수입니다.
둘째 줄에 산이가 선택한 로또 번호 6개가 공백을 기준으로 주어집니다.
이 때 각 번호는 1보다 크거나 같고 45보다 작거나 같은 정수입니다.
[출력조건]
산이의 로또 당첨 여부를 출력합니다.
이 때 1등은 1, 2등은 2, 3등은 3, 4등은 4, 5등은 5, 꽝은 -1을 출력합니다.
[입력예시 1]
15 3 44 45 7 5 6
3 5 6 7 44 15
[출력예시 1]
2
[입력예시 2]
15 3 44 45 7 5 6
45 44 43 42 41 40
[출력예시 2]
-1
[입력정답 확인용 1]
15 3 44 45 7 5 6
1 2 3 4 5 7
[출력정답 확인용 1]
5
[입력정답 확인용 2]
1 2 3 4 5 6 7
1 2 3 4 5 6
[출력정답 확인용 2]
1
[입력정답 확인용 3]
43 45 1 8 3 7 5
4 5 1 8 3 43
[출력정답 확인용 3]
4
[입력정답 확인용 4]
43 4 1 8 3 7 5
4 5 1 8 3 43
[출력정답 확인용 4]
2
[입력정답 확인용 5]
7 4 5 8 10 11 15
1 2 3 4 5 6
[출력정답 확인용 5]
-1
[풀이]
Scanner sc = new Scanner(System.in);
String lottoStr; // 첫번째로 로또의 당첨번호 6개와 보너스 번호 문자열
String inputStr; //산이가 선택한 로또 번호 6개 문자열
int[] lottoArr; // 첫번째로 로또의 당첨번호 6개와 보너스 번호 1개
int[] inputArr; //산이가 선택한 로또 번호 6개
String tempArr[];
System.out.println("첫번째로 로또의 당첨번호 6개와 보너스 번호를 공백을 기준으로 입력하세요.");
lottoStr = sc.nextLine();
tempArr = lottoStr.split(" ");
lottoArr = new int[tempArr.length];
for(int i=0; i<lottoArr.length; i++) {
lottoArr[i] = Integer.parseInt(tempArr[i]);
}
System.out.println("두번째로 산이가 선택한 로또 번호 6개를 공백을 기준으로 입력하세요.");
inputStr = sc.nextLine();
tempArr = inputStr.split(" ");
inputArr = new int[tempArr.length];
for(int i=0; i<inputArr.length; i++) {
inputArr[i] = Integer.parseInt(tempArr[i]);
}
int count = 0; // 번호 당첨 갯수
for(int i=0; i<inputArr.length; i++) {
for(int j=0; j<lottoArr.length-1; j++) { //보너스 로또 번호 제외
if(inputArr[i] == lottoArr[j]) {
count++;
}
}
}
switch (count) {
case 6: //보너스 번호 제외한 당첨번호가 6개 모두 일치할 때 1등
System.out.println("1");
break;
case 5:
boolean isSecond = false;
for(int i=0; i<inputArr.length; i++) {
if(inputArr[i] == lottoArr[lottoArr.length]) { //보너스 번호 당첨
isSecond = true;
break;
}
}
if(isSecond) {
System.out.println("2"); //2등
} else {
System.out.println("3"); //3등
}
break;
case 4: //보너스 번호 제외한 당첨번호 4개가 일치할 때 4등
System.out.println("4");
break;
case 3: //보너스 번호 제외한 당첨번호 3개가 일치할 때 5등
System.out.println("5");
break;
default: //꽝
System.out.println("-1");
break;
}
'Etc.' 카테고리의 다른 글
Package에서 활성화된 파일의 위치 찾기 (0) | 2018.11.29 |
---|---|
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path (0) | 2018.11.27 |
WAS서버 Apache Tomcat 환경변수 설정 (0) | 2018.11.26 |
윈도우10 64bit 환경 Web서버 Apache설치 (0) | 2018.11.26 |
EDAILY CODING CHALLENGE 2018 - 청소년부 예제문제풀이 (0) | 2018.11.20 |
- Total
- Today
- Yesterday
- Autoscroll from Source
- Spring Security
- 라이브러리 종속성
- webprogramming
- gradle 종속성
- DB 툴
- runtimeOnly
- 패키지 위치 찾기
- SQL 개발툴
- java
- 활성화된 파일 위치 찾기
- spring 기본 login
- Whitelabel Error Page(404 Not Found)에러
- compileOnly
- 웹서버설치
- 이데일리 코딩 챌린지
- mysql 연동
- apache tomcat 설정
- 알고리즘
- springboot에서 jsp호출
- 기초입문
- tomcat 환경변수
- Apache설치
- Encoding UTF-8
- 나눔고딕코딩
- login page
- EDAILY CODING CHALLENGE
- eclipse disable welcome page
- spring loaded
- hot swapping
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |