코딩/2-JAVA

C04배열 => C0401날짜 , C0402중복숫자 , C0403교환

tree0505 2025. 6. 20. 16:49
반응형
  • 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; 

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));

}
}


 

반응형