✅ 답안과 비교하여 스스로 코드 개선점 짚어보기 완료(2022.01.02)
1. 배열
BASIC1. ✅
값 대입하는 for문 하나, 출력하는 for문 하나 따로 쓴다.
int value라는 별도 변수를 선언하지 않고 arr[i] = i + 1; 처럼 식을 세울 수 있다.
int[] iarr = new int[10];
/* 선언 및 할당 */
for(int i=0; i < iarr.length; i++) {
iarr[i] = i+1;
}
/* 출력 */
for(int i=0; i < iarr.length; i++) {
System.out.print(iarr[i] + " ");
}
package com.greedy.section01.array.level01.basic;
public class Application1 {
public static void main(String[] args) {
/* 길이가 10인 정수형 배열을 선언 및 할당한 뒤
* 각 인덱스에 차례대로 1부터 10까지 값을 넣고 출력하세요
* */
int[] arr = new int[10];
for(int i=0, value=1; i < arr.length; i++) {
arr[i] = value++;
System.out.print(arr[i] + " ");
}
}
}
1 2 3 4 5 6 7 8 9 10
BASIC2. ✅
package com.greedy.section01.array.level01.basic;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 길이가 5인 String 배열을 선언하고
* "딸기", "바나나", "복숭아", "키위", "사과" 로 초기화를 하고
* 스캐너로 0부터 4까지의 정수를 입력 받아
* 해당 정수의 인덱스에 있는 과일을 출력하세요
*
* 단, 배열의 인덱스 범위를 벗어나는 경우 "준비된 과일이 없습니다." 를 출력하세요
*
* -- 입력 예시 --
* 0부터 4까지의 정수를 입력하세요 : 2
*
* -- 출력 예시 --
* 복숭아
*
* -- 입력 예시 --
* 0부터 4까지의 정수를 입력하세요 : 5
*
* -- 출력 예시 --
* 준비된 과일이 없습니다.
* */
String[] fruit = {"딸기", "바나나", "복숭아", "키위", "사과"};
Scanner scanner = new Scanner(System.in);
System.out.print("0부터 4까지의 정수를 입력하세요 : ");
int num = scanner.nextInt();
if(num >= fruit.length) {
System.out.println("준비된 과일이 없습니다.");
} else {
System.out.println(fruit[num]);
}
}
}
0부터 4까지의 정수를 입력하세요 : 6
준비된 과일이 없습니다.
NORMAL1. ✅
package com.greedy.section01.array.level02.normal;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 문자열을 하나 입력받아 문자 자료형 배열로 바꾼 뒤
* (String Class의 toCharArray() : char[] 메소드 활용 가능
* char[] carr = 문자열변수.toCharArray(); 와 같이 사용)
* 검색할 문자를 하나 입력 받아
* 입력 받은 검색할 문자가 문자열에 몇개 있는지를 출력하세요
*
* -- 입력 예시 --
* 문자열을 하나 입력하세요 : helloworld
* 검색할 문자를 입력하세요 : l
*
* -- 출력 예시 --
* 입력하신 문자열 helloworld에서 찾으시는 문자 l은 3개 입니다.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 하나 입력하세요 : ");
String str = scanner.nextLine();
char[] carr = str.toCharArray();
System.out.print("검색할 문자를 하나 입력하세요 : ");
char ch = scanner.next().charAt(0);
int count=0;
for(int i=0; i < str.length(); i++) {
if(carr[i] == ch) {
count++;
}
}
System.out.println("입력하신 문자열 " + str + "에서 찾으시는 문자 " + ch + "은 " + count + "개 입니다.");
}
}
문자열을 하나 입력하세요 : helloworld
검색할 문자를 하나 입력하세요 : l
입력하신 문자열 helloworld에서 찾으시는 문자 l은 3개 입니다.
NORMAL2. ✅
char[] 배열이라 for문 바깥 출력 메소드에서 (carr)로 호출이 가능했다.
답안에서처럼 for문 안에서 출력이 치러져야 할 경우에는 반드시 (carr[i])로 명시하여야겠다.
package com.greedy.section01.array.level02.normal;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 주민등록번호를 스캐너로 입력 받고 문자 배열로 저장한 뒤,
* 성별 자리 이후부터 *로 가려서 출력하세요
*
* -- 입력 예시 --
* 주민등록번호를 입력하세요 : 990101-1234567
*
* -- 출력 예시 --
* 990101-1******
*/
Scanner scanner = new Scanner(System.in);
System.out.print("주민등록번호를 입력하세요 : ");
String regNo = scanner.nextLine();
char[] carr = regNo.toCharArray();
for(int i=0; i < carr.length; i++) {
if(i > 7) {
carr[i] = '*';
}
}
System.out.println(carr);
}
}
주민등록번호를 입력하세요 : 990101-1234567
990101-1******
2. 다차원 배열
BASIC1. ✅
여기서도 마찬가지로 선언 및 할당 for문 따로, 출력을 위한 for문 따로 작성할 수 있다.
1씩 증가하는 값이므로 별도의 변수를 활용해 전위연산/후위연산 쓸 수 있겠다.
package com.greedy.section02.demensional_array.level01.basic;
public class Application1 {
public static void main(String[] args) {
/* 행의 길이가 3, 열의 길이가 4인 정수형 2차원 배열을 선언 및 할당하고,
* 각 인덱스에 차례대로 1부터 12까지의 정수를 대입한 뒤
* 그 값을 출력하는 코드를 작성하시오.
*
* -- 출력 예시 --
* 1 2 3 4
* 5 6 7 8
* 9 10 11 12
*
* 단, 출력물의 줄맞춤은 신경쓰지 말고 풀어보세요
* */
int[][] iarr = new int[3][4];
for(int i=0, value=0; i < iarr.length; i++) {
for(int j=0; j < iarr[i].length; j++) {
iarr[i][j] = ++value;
System.out.print(iarr[i][j] + " ");
}
System.out.println();
}
}
}
1 2 3 4
5 6 7 8
9 10 11 12
NORMAL1. ✅
iarr[i][j] 값을 강제형변환 하는 방법을 썼는데, 답안에서는 char[][] carr = new char[row][col];처럼 char 배열을 선언해 활용했다.
또, 랜덤 값을 만들 때 Random random = new Random(); 선언 후 → carr[i][j] = (char)('A' + random.nextInt(26));처럼 쓰는 방법도 있다.
package com.greedy.section02.demensional_array.level02.normal;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 가로와 세로 길이를 정수형으로 입력 받아
* 입력받은 가로 세로 길이를 이용하여 이차원 배열을 할당하고
* 각 인덱스에는 랜덤으로 알파벳 대문자 넣어서 출력
*
* 단, 가로 행 혹은 세로 열은 반드시 1~10 까지의 정수를 입력해야 하고
* 그렇지 않은 경우에는 "반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요." 출력 후
* 가로 행 또는 세로 열을 다시 입력받을 수 있도록 한다.
*
* -- 입력 예시 --
* 가로 행의 수를 입력하세요 : 5
* 세로 열의 수를 입력하세요 : 4
*
* -- 출력 예시 --
* F H Z G
* W F O T
* O R X V
* W H J X
* W S S J
* */
Scanner scanner = new Scanner(System.in);
int row = 0;
int col = 0;
while(true) {
System.out.print("가로 행의 수를 입력하세요 : ");
row = scanner.nextInt();
System.out.print("세로 열의 수를 입력하세요 : ");
col = scanner.nextInt();
if((1 <= row && row <= 10) && (1 <= col && col <= 10)) {
break;
} else {
System.out.println("반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요.");
}
}
int[][] iarr = new int[row][col];
char ch = ' ';
for(int i=0; i < iarr.length; i++) {
for(int j=0; j < iarr[i].length; j++) {
ch = (char)((int)(Math.random() * 26) + 'A');
iarr[i][j] = (char)ch;
System.out.print((char)iarr[i][j] + " ");
}
System.out.println();
}
}
}
가로 행의 수를 입력하세요 : 11
세로 열의 수를 입력하세요 : 4
반드시 1~10까지의 정수를 입력해야 합니다. 다시 입력하세요.
가로 행의 수를 입력하세요 :
NORMAL2. ✅
students[tmp++]; 후위연산으로 작성하고 그 다음 줄은 삭제할 수 있다.
순서가 1분단~2분단 이어져야 하므로 index 값인 int tmp를 바깥에 놓고 사용한다.
package com.greedy.section02.demensional_array.level02.normal;
public class Application2 {
public static void main(String[] args) {
/* 길이 12의 문자열 배열을 생성하여 12명의 학생들을 출석부 순으로 1차원 배열에 할당하고,
* 2열 3행 2차원 배열을 2개 할당하여 각 1분단 2분단이라고 칭한다.
* 순차적으로 1분단 부터, 왼쪽부터 오른쪽, 1행에서 아래 행으로 번호 순으로 자리를 배치하고 출력하세요
*
* -- 출석부 --
* 1. 홍길동
* 2. 이순신
* 3. 유관순
* 4. 윤봉길
* 5. 장영실
* 6. 임꺽정
* 7. 장보고
* 8. 이태백
* 9. 김정희
* 10. 대조영
* 11. 김유신
* 12. 이사부
*
* -- 출력 예시 --
* == 1분단 ==
* 홍길동 이순신
* 유관순 윤봉길
* 장영실 임꺽정
*
* == 2분단 ==
* 장보고 이태백
* 김정희 대조영
* 김유신 이사부
*/
String[] students = {"홍길동", "이순신", "유관순", "윤봉길", "장영실", "임꺽정", "장보고", "이태백", "김정희", "대조영", "김유신", "이사부"};
String[][] first = new String[3][2];
String[][] second = new String[3][2];
int tmp = 0;
/* 1분단 */
for(int i=0; i < first.length; i++) {
for(int j=0; j < first[i].length; j++) {
first[i][j] = students[tmp];
tmp++;
}
}
/* 2분단 */
for(int i=0; i < second.length; i++) {
for(int j=0; j < second[i].length; j++) {
second[i][j] = students[tmp];
tmp++;
}
}
/* 출력 */
System.out.print("== 1분단 ==");
for(int i=0; i < first.length; i++) {
System.out.println();
for(int j=0; j < first[i].length; j++) {
System.out.print(first[i][j] + " ");
}
}
System.out.println();
System.out.print("== 2분단 ==");
for(int i=0; i < second.length; i++) {
System.out.println();
for(int j=0; j < second[i].length; j++) {
System.out.print(second[i][j] + " ");
}
}
}
}
== 1분단 ==
홍길동 이순신
유관순 윤봉길
장영실 임꺽정
== 2분단 ==
장보고 이태백
김정희 대조영
김유신 이사부
'Java' 카테고리의 다른 글
[자바/수업 Quiz] 배열 (0) | 2021.12.28 |
---|---|
[JAVA] 5-2. 배열의 복사 및 정렬 (0) | 2021.12.28 |
[JAVA] 5-1. 배열의 선언, 할당, 초기화 (0) | 2021.12.27 |
[자바의 정석] Ch 4. 제어문 예제 응용 학습 (0) | 2021.12.26 |
[JAVA/수업 과제] 반복문, 분기문 practice (0) | 2021.12.26 |