배열 기초
package Day03;
public class ArrayTest {
static void main() {
int[] a = new int[5];
// a[0] = 0
// a[1] = 0
// a[2] = 0
// a[3] = 0
// a[4] = 0
a[0] = 10;
a[1] = 20;
a[2] = 30;
a[3] = 40;
a[4] = 50;
int[] b = new int[1000];
for (int i = 0; i < b.length; i++) {
b[i] = 10 * (i +1);
}
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
// [0] [1] [2]
int[] c = {10, 20, 30};
}
}
package Day03;
import java.util.Random;
public class Q1 {
static void main() {
Random r = new Random();
int[] a = new int[10];
int max = 0;
for (int i = 0; i < a.length; i++) {
a[i] = r.nextInt(11);
if (max < a.length) {
max = a[i];
}
// System.out.print(a[i]);
// 시간부족으로 다 못풀었다.
}
}
}
시간이 부족해서 문제를 다 못풀었다!
package Day03;
import java.util.Random;
public class Q1_1 {
static void main() {
// 10개의 값을 담는 배열 생성(int)
// 각 배열안에 인덱스 값에 난수를 대입
// 최대값을 찾고
// 최대값을 가지고 index를 출력
Random r = new Random();
int[] array = new int[10];
int max = 0;
for (int i = 0; i < array.length; i++) {
array[i] = r.nextInt(11);
if (max < array[i]) {
max = array[i];
}
System.out.println("arry[" + i + "] : " + array[i]);
}
for (int i = 0; i < array.length; i++) {
if (array[i] == max) {
System.out.println("index: " + i);
}
}
}
}
package Day03;
public class MultiArrayTest {
static void main() {
int[][] arr = new int[5][5];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[0][0]);
int num = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = num++;
System.out.print("arr[" + i + "][" + j + "]: " + arr[i][j] + "\t");
}
System.out.println();
}
}
}
길이가 5인 정수형 배열을 생성한 후, 다음 조건을 만족하는 프로그램을 작성하시오.
조건
배열에 1~9 사이의 랜덤한 숫자를 저장하시오.
중복된 숫자는 허용하지 않는다.
배열의 내용을 출력하시오. (정렬 전)
배열의 값을 오름차순으로 정렬하시오.
정렬된 배열을 다시 출력하시오.
package Day03;
import java.util.Random;
public class Q2 {
static void main() {
Random r = new Random();
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
arr[j] = j;
}
System.out.println("a[" + arr[i] + "]" + " = " + r.nextInt(11));
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
i--;
break;
}
}
}
}
}
이 문제 또한 시간 부족으로 풀지 못했다.
package Day03;
import java.util.Random;
public class Q2_1 {
static void main() {
// 1. 랜덤값을 각각 배열에 값을 채울 때 중복 x
System.out.println("정렬 전======================================");
Random r = new Random();
int[] array = new int[5];
for (int i = 0; i < array.length; i++) {
array[i] = r.nextInt(9)+1; //1~9
for (int j = 0; j < i; j++) {
if (array[i] == array[j]) {
i--;
break;
}
}
}
for (int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] : " + array[i]);
}
// 정렬
for (int i = 0; i < array.length; i++) {
for (int j = i+1; j < array.length; j++) {
if (array[i] > array[j]) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
System.out.println("정렬 후======================================");
// 출력
for (int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] : " + array[i]);
}
}
}
비행기 좌석 예약 시스템을 작성하시오.
비행기에는 9행 2열의 좌석이 있다. 사용자가 원하는 좌석을 입력하여 예약하는 프로그램을 작성하시오.
조건
좌석은 9행 2열의 2차원 배열로 관리한다.
0 : 빈 좌석
1 : 예약된 좌석
처음에는 모든 좌석이 비어 있다.
사용자는 예약할 행과 열을 입력한다.
입력한 좌석이 비어 있으면
예약 처리한다.
남은 좌석 수를 1 감소시킨다.
예약 완료 메시지를 출력한다.
이미 예약된 좌석이면
예약하지 않는다.
현재 비어 있는 모든 좌석을 출력한다.
존재하지 않는 좌석을 입력하면
"잘못된 입력입니다."를 출력한다.
모든 좌석이 예약될 때까지 프로그램을 반복 실행한다.
이 문제는 아예 손도 못대고 문제 풀이시간에 기초 for문 공부를 하였다!
package Day03;
// 비행기 예약 시스템 만들기
import java.util.Scanner;
public class Q3 {
static void main() {
// 예약을 해야하기 때문에
// 좌석 배열, 입력 객체, 남은 좌석을 알려주는 변수
Scanner sc = new Scanner(System.in); // 입력 객체
int[][] seat = new int[9][2]; //초기화 0 -> 빈좌석 0 예약좌석 1 좌석 배열
int count = 18; // 총 예약 가능 수
while (/*count > 0*/ count != 0) {
// 0. 예약 입력
System.out.println("예약하실 좌석을 입력하세요(총 " + count + "석): ");
int h = sc.nextInt();
int y = sc.nextInt();
System.out.println(h + "행");
System.out.println(y + "열");
// 올바른 입력
// h <= 9 && h > 0 ----> 0 < h <= 9
// y <= 2 && h > 0 ----> 0 < h <= 2
if (h <= seat.length && h >= 0 && y <= seat[0].length && y > 0) {
// 1. 예약
if (seat[h-1][y-1] == 0) {
seat[h-1][y-1] = 1;
count--;
System.out.println(h + "행, " + y + "열 예약이 완료되었습니다.");
// 2. 예약된 자리 예약시 빈 좌석 출력
} else {
for (int i = 0; i < seat.length; i++) {
for (int j = 0; j < seat[i].length; j++) {
if (seat[i][j] == 0) {
System.out.println("비어있는 좌석: " + (i+1) + "행" + (j+1) + "열");
}
}
}
}
// 잘못된 입력
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
}
package Practice;
public class Q1 {
static void main() {
/*
1부터 100까지 출력하되 다음 조건을 만족하시오.
조건
4의 배수는 출력하지 않는다
대신 4의 배수 자리에는 "X"를 출력한다
한 줄로 출력 (공백으로 구분)
*/
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
System.out.print("X ");
} else {
System.out.print(i + " ");
}
}
}
}
package Practice;
public class Q2 {
static void main() {
/*
1부터 100까지 출력하되 다음 조건을 만족하시오.
3의 배수 → "A"
5의 배수 → "B"
3과 5의 공배수 → "AB"
나머지는 숫자 그대로 출력
*/
for (int i = 1; i <= 100; i++) {
if (i % 4 == 0) {
System.out.print("X ");
} else {
System.out.print(i + " ");
}
}
}
}
package Practice;
public class Q3 {
static void main() {
/*
길이 10짜리 배열을 만들고 다음 조건을 만족하시오.
배열에는 1부터 10까지 순서대로 저장
출력할 때는 다음 규칙 적용
짝수는 "EVEN" 출력
홀수는 숫자 그대로 출력
*/
for (int i = 1; i <= 100; i++) {
if (i % 15 == 0) {
System.out.print("AB ");
} else if (i % 3 == 0) {
System.out.print("A ");
} else if (i % 5 == 0) {
System.out.print("B ");
} else {
System.out.print(i + " ");
}
}
}
}
package Practice;
public class Q4 {
static void main() {
/*
길이 10짜리 배열을 만들고 다음 조건을 만족하시오.
배열에는 1부터 10까지 순서대로 저장
출력할 때는 다음 규칙 적용
짝수는 "EVEN" 출력
홀수는 숫자 그대로 출력
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[1] [EVEN] [3] [EVEN] [5] [EVEN] [7] [EVEN] [9] [EVEN]
*/
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i +1;
if (arr[i] % 2 == 0) {
System.out.print("EVEN ");
} else {
System.out.print(arr[i] + " ");
}
}
}
}
숫자 맞추기 게임을 작성하시오.
컴퓨터는 1부터 100 사이의 랜덤한 숫자를 하나 생성하고, 사용자가 그 숫자를 맞추는 프로그램을 작성하시오.
조건
컴퓨터는 1 ~ 100 사이의 랜덤 숫자를 1개 생성한다.
Random 사용
사용자는 숫자를 입력한다.
입력한 숫자에 따라 다음을 출력한다.
입력값이 정답보다 크면 → "다운"
입력값이 정답보다 작으면 → "업"
입력값이 정답과 같으면 → "맞췄습니다. 축하합니다."
입력한 숫자가 1~100 범위를 벗어나면
"잘못된 숫자입니다." 출력
정답을 맞출 때까지 반복한다.
package Day03;
import java.util.Random;
import java.util.Scanner;
public class Q4 {
static void main() {
Random r = new Random();
int com = r.nextInt(100) + 1;
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("숫자를 입력하세요: ");
int user = sc.nextInt();
if (user >= 1 && user <= 100) {
if (user == com) {
System.out.println("맞췄습니다. 축하합니다.");
break;
} else if (user > com) {
System.out.println("다운");
continue;
} else {
System.out.println("업");
continue;
}
} else {
System.out.println("잘못된 숫자입니다.");
continue;
}
}
}
}
이 문제는 시간 안에 다 풀었다! 나는 if문은 생각보다 괜찮은데 for문이 어려운 거 같다.
package Day03;
import java.util.Random;
import java.util.Scanner;
public class Q4_1 {
static void main() {
// 1. Random 객체 필요
Random r = new Random();
// 2. Scanner 객체 필요
Scanner sc = new Scanner(System.in);
// 3. com 난수값 받기 -> 1회성 바뀌면 맞출 수 없다.
int com = r.nextInt(100) +1;
System.out.println("Com: " + com);
// 맞출 때까지 -> 무한루프 -> 추후에 if 조건 break; 할거야
while (true) {
int user = sc.nextInt();
if (com > user) {
System.out.println("업");
} else if (com < user) {
System.out.println("다운");
} else {
System.out.println("정답입니다.");
break;
}
}
}
}
1부터 100까지 출력하되 다음 조건을 만족하시오.
📌 조건
숫자가 5의 배수이면 해당 숫자를 출력하지 않는다
대신 "SKIP"을 출력한다
나머지는 그대로 숫자를 출력한다
단일 for문 사용
package Practice;
public class Q5 {
static void main() {
for (int i = 1; i <= 100; i++) {
if (i % 5 == 0) {
System.out.print("SKIP ");
} else {
System.out.print(i + " ");
}
}
}
}
1부터 100까지 출력하되 다음 조건을 만족하시오.
📌 조건
3의 배수 → "A"
5의 배수 → "B"
3과 5의 공배수 → "AB"
단, 7의 배수는 출력하지 않는다 (SKIP 처리)
나머지는 숫자 출력
package Practice.Day1;
public class Q6 {
static void main() {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
System.out.print("SKIP");
} else if (i % 15 == 0) {
System.out.print("AB ");
} else if (i % 3 == 0) {
System.out.print("A ");
} else if (i % 5 == 0) {
System.out.print("B ");
} else {
System.out.print(i + " ");
}
}
}
}
오늘은 복잡한 if문과 for문 그리고 배열까지 배웠다.
초반에 수박 겉핥기 식으로 배운 것과는 차원이 다르게 어려워서 이해하는 시간이 오래걸렸다.
실제로 문제를 풀면서 다 못 푼 문제도 있었고 손도 못 댄 문제도 있었다.
이렇게 다시 배우면서 내가 어느 부분이 부족한지를 알게 되었다.
if문은 어느정도 활용이 가능한데 for문은 아예 활용이 불가능하다.
그래서 for문을 중점적으로 공부하며 기초를 다지는 시간을 가지기로 했다.
앞으로 할 게 산더미처럼 쌓여있지만 새로운 것들을 배워나가고 문제를 풀어가며 뿌듯함과 재미를 느낀다.
내년 이맘때쯤 내가 궁금해지게 되었다.
열심히 하자!