- C04배열
- C0401날짜
- C0401개념01날짜
package C0401날짜;
/*
[문제]
철수와 영희는 3월 3일에 만났다.
철수는 영희와 100일 기념일에 축하파티를 하려고 한다.
만난지 100일 뒤는 몇 월 몇 일인지 구하시오.
단, 윤년은 고려하지 않는다.
[정답]
6월 11일
*/
public class C0401개념01날짜 {
public static void main(String[] args) {
int[] monthList =
{31, 28, 31, 30,
31, 30, 31, 31,
30, 31, 30, 31};
int month = 3;
int day = 3;
/*
1. 1월1일부터 3월3일까의 누적 일 수
= 31(1월) + 28(2월) + 3(3월) = 62
2. 100일 추가로 더함
= 62 + 100 = 162
3. 162일에 월을 계속 차감하면서, 기념일자를 찾아감
162 - 1월(31) = 131
131 - 2월(28) = 103
103 - 3월(31) = 72
72 - 4월(30) = 42
40 - 5월(31) = 11
11 - 6월(30) = 음수
*/
int total = 0;
for(int i=0; i<month - 1; i++) {
total += monthList[i];
}
total += day;
System.out.println(total);
total += 100;
System.out.println(total);
for(int i=0; i<monthList.length; i++) {
int temp = total;
total -= monthList[i];
if(total < 0) {
System.out.println(i + 1 + "월 " + temp + "일");
break;
}
}
}
}
- C0402개념02_상수
- const b = 20;
- const는 못 바꾼다.
- final int b = 10;
- 바뀌지 않는다.
- 바뀌지 않는것을 상수라고 한다.
- 자바는 일반적으로 상수는 대문자로 표시한다.
- final int MAX_SIZE = 20;
- const b = 20;
package C0401날짜;
public class C0402개념02_상수 {
public static void main(String[] args) {
int a = 10;
a = 20;
a = 30;
// 상수 ==> 변하지 않는수
// 키워드 final ==> 말그대로 마지막값이라는뜻 (변형불가)
final int b = 20;
// b = 30; //키워드 final을 붙이면 한번정한값을 수정할수없다.
// 자바는 일반적으로 상수는 대문자로 표시한다. (암묵적인룰)
final int MAX_SIZE = 20;
int[] arr = new int[MAX_SIZE];
}
}
- C0402중복숫자
- C0402개념01_검색예외처리
package C0402중복숫자;
import java.util.Scanner;
/*
[문제]
값을 입력받고 인덱스를 출력하시오.
단, 없는 값이면 -1을 출력하시오.
[예시1]
입력 : 67
결과 : 4
[예시2]
입력 : 56
결과 : -1
*/
public class C0402개념01_검색예외처리 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] array = {10, 543, 52, 24, 67};
System.out.print("입력 : ");
int num = scan.nextInt();
int index = -1;
for(int i=0; i<array.length; i++) {
if(num == array[i]) {
index = i;
break;
}
}
// System.out.println(index);
if(index == -1) {
System.out.println("잘못입력했습니다.");
} else {
System.out.println(index);
}
/*
[풀이]
num = 67
index = -1
i = 0 67 == array[0]:10 false index = -1
i = 1 67 == array[1]:543 false index = -1
i = 2 67 == array[2]:52 false index = -1
i = 3 67 == array[3]:24 false index = -1
i = 4 67 == array[4]:67 true index = 4
*/
scan.close();
}
}
- C0402개념02_중복숫자예외처리
- 1~4를 랜덤으로 저장해라. 단 섞어서 저장하시오
- int [ ] arr = new int [ 4 ] ;
- boolean [ ] check = new boolean [ 4 ] ;
- 전부 false가 들어가있다. new 하면 알아서 false가 들어간다.
- 랜덤으로 3을 뽑으면. check 4번칸이 false니까. arr첫번째에 3을 넣는다.
- check 배열에 4번째를 true로 바꿔준다.

package C0402중복숫자;
import java.util.Arrays;
import java.util.Random;
/*
# 중복숫자 금지 해결방법
[방법2] check배열 활용
*/
public class C0402개념02_중복숫자예외처리 {
public static void main(String[] args) {
Random ran = new Random();
int[] arr = new int[4];
boolean[] check = new boolean[4];
/*
2 2 3 2 3 1 0
i = 0, r = 2 check[2] == false true arr = [3, 0, 0, 0], check = [false, false, true, false]
i = 1, r = 2 check[2] == false false arr = [3, 0, 0, 0], check = [false, false, true, false]
i = 1, r = 3 check[3] == false true arr = [3, 4, 0, 0], check = [false, false, true, true]
i = 2, r = 2 check[2] == false false arr = [3, 4, 0, 0], check = [false, false, true, true]
i = 2, r = 3 check[3] == false false arr = [3, 4, 0, 0], check = [false, false, true, true]
i = 2, r = 1 check[1] == false true arr = [3, 4, 2, 0], check = [false, true, true, true]
i = 3, r = 0 check[0] == false true arr = [3, 4, 2, 1], check = [true, true, true, true]
*/
// while문 해결해보기!
for(int i=0; i<4; i++) {
int r = ran.nextInt(4);
System.out.println(r);
if(check[r] == false) {
check[r] = true;
arr[i] = r + 1;
}else {
i -= 1;
}
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(check));
}
}

package C0402중복숫자_문제;
import java.util.Arrays;
import java.util.Random;
/*
[문제]
[1~4] 중복없이 순서는 랜덤으로 저장하시오
*/
/*
[예시]
[1, 4, 3, 2]
*/
public class C0402문제02 {
public static void main(String[] args) {
Random ran = new Random();
int[] arr = new int[4];
//빈방이 4개 있는 배열 0 1 2 3
//인덱스가 0~3이라는 의미로 OK예요!
boolean[]check = new boolean[4];
//false false false false
//총 4번 반복 → arr 배열에 중복 없이 4개의 값을 넣기 위한 루프.
for(int i = 0; i<4; i++) {
int r = ran.nextInt(4);
//0~3 사이의 난수 생성
System.out.println(r);
if(check[r] == false) {
check[r] = true;
arr[i] = r +1;
}else {
i -= 1;
}
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(check));
}
}
- C0403교환
- C0403개념01_교환
- package C0403교환;
import java.util.Arrays;
import java.util.Scanner;
/*
[문제]
값 2개를 입력받아 arr배열에서 두 값을 교체하시오.
단, 없는 값을 입력했을 시 예외처리를 하시오.
[예시]
값1 입력 : 40
값2 입력 : 20
결과 : {10, 40, 30, 20, 50}
값1 입력 : 87
값2 입력 : 20
결과 : 값을 잘못 입력했습니다.
*/
public class C0403개념01_교환 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] arr = { 10, 20, 30, 40, 50 };
Systehttp://m.out.print("값1 입력 : ");
int value1 = scan.nextInt();
Systehttp://m.out.print("값2 입력 : ");
int value2 = scan.nextInt();
int index1 = -1;
int index2 = -1;
for(int i=0; i<arr.length; i++) {
if(value1 == arr[i]) {
index1 = i;
}
if(value2 == arr[i]) {
index2 = i;
}
}
if(index1 == -1 || index2 == -1) {
System.out.println("값을 잘못 입력했습니다.");
} else {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
System.out.println(Arrays.toString(arr));
}
scan.close();
}
}
package C0403교환_문제;
import java.util.Arrays;
import java.util.Scanner;
/*
[문제]
값 2개를 입력받아 arr배열에서 두 값을 교체하시오.
단, 없는 값을 입력했을 시 예외처리를 하시오.
[예시]
값1 입력 : 40
값2 입력 : 20
결과 : {10, 40, 30, 20, 50}
값1 입력 : 87
값2 입력 : 20
결과 : 값을 잘못 입력했습니다.
*/
public class C0403문제01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] arr = { 10, 20, 30, 40, 50 };
System.out.println("값1 입력 : ");
int value1 = scan.nextInt();
System.out.println("값2 입력 : ");
int value2 = scan.nextInt();
int index1 = -1;
//-1은 "아직 못 찾았다" 또는 **"해당 값이 없다"**를 의미해요.
//배열 arr에서 사용자가 입력한 값이 존재하는지 탐색하면서 index1, index2를 실제 인덱스로 바꿔줍니다.
int index2 = -1;
for(int i = 0; i<arr.length; i++) {
if(value1 == arr[i]) {
index1 = i;
}
if(value2 == arr[i]) {
index2 = i;
}
}
if(index1 == -1 || index2 == -1) {
System.out.println("값을 잘못 입력했습니다. ");
//즉, -1이라는 초기값이 실제로 값을 못 찾은 상태임을 판별하는 기준으로 쓰이는 거예요.
//"사용자가 없는 값을 입력해서 index1이 값이 바뀌지 않아서, '값을 잘못 입력했습니다'가 나오는 거지?"
}else {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
System.out.println(Arrays.toString(arr));
}
scan.close();
}
}
- C0403개념02_랜덤교환
package C0403교환;
import java.util.Arrays;
import java.util.Random;
public class C0403개념02_랜덤교환 {
public static void main(String[] args) {
/*
[문제]
랜덤으로 arr배열의 값을 교환해보자.
[예시]
30과 40을 교환
교환 전 = 10,20,30,40,50,60,70,80
교환 후 = 10,20,40,30,50,60,70,80
*/
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80};
Random ran = new Random();
System.out.println(Arrays.toString(arr));
int index1 = ran.nextInt(arr.length);
int index2 = ran.nextInt(arr.length);
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
System.out.println(Arrays.toString(arr));
}
}
- C0403개념03_셔플
package C0403교환;
import java.util.Arrays;
import java.util.Random;
/*
# 중복숫자 금지 해결방법
[방법] 셔플(shuffle)
*/
public class C0403개념03_셔플 {
public static void main(String[] args) {
Random ran = new Random();
// 1부터 4사이의 랜덤 숫자를 중복없이 arr배열 저장
int[] arr = new int[4];
for(int i=0; i<4; i++) {
arr[i] = i + 1;
}
System.out.println(Arrays.toString(arr));
// arr = [1, 2, 3, 4]
for(int i=0; i<100; i++) {
int r1 = ran.nextInt(4); // r1 = 1
int r2 = ran.nextInt(4); // r2 = 3
int temp = arr[r1]; // temp = 2
arr[r1] = arr[r2]; // arr[1] = 4
arr[r2] = temp; // arr[3] = 2
}
System.out.println(Arrays.toString(arr));
}
}
'코딩 > 2-JAVA' 카테고리의 다른 글
| C05배열과데이터 (0) | 2025.06.23 |
|---|---|
| C0404규칙찾기, C0405규칙찾기입력, C0405행렬 (0) | 2025.06.23 |
| C03반복문 => C0304반복문입력 (0) | 2025.06.20 |
| C03반복문 => C0301공약수 ~ C0303연립방정식_개념연습 (0) | 2025.06.19 |
| C02조건문 (0) | 2025.06.19 |