🧩1. math.random() 로또번호 만들기
Math.random() 메소드와 3항 교체로 자리바꾸기
- 45개의 배열을 만듭니다. 배열에는 1~45의 숫자를 채웁니다.
- 최대한 많은 회수를 반복하며, 2개의 랜덤 숫자를 뽑습니다.
- 랜덤 숫자는 인덱스로 이용되며, 첫번째 만든 배열에서 해당하는 인덱스의 값을 바꿔줍니다.
- 임시 저장 변수를 이용해서 첫번째 인덱스의 값을 임시 변수에 저장합니다.
- 12번 인덱스에 저장된 값이 1 이었다고 가정하면, temp 는 1이 됩니다.
- 30번 인덱스에 저장된 값이 20 이었다고 가정하면, 12번 인덱스의 값은 20이 됩니다.
- 임시 변수에 저장된 값 1을 다시 30번 인텍스에 넣습니다.
- 처음 12번, 30번 인덱스 값은 각각 1, 20 이었고, 변경 후 각각 20, 1 이 됩니다.
- 이렇게 자리 바꾸기를 계속 수행한 후에 앞에서 6개의 숫자를 뽑아냅니다.
public class lottoSelect {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] setArray = new int[45];
double random = Math.random(); // 0 <= Math.random() <1
// 로또는 1~45 사이의 수를 뽑아는 방법
// 0X45 +1 <= (int)(Math.random() x 45) < 1x45 +1
// 1~45 까지 채워진 배열을 만든다
for (int i = 0; i < setArray.length; i++) {
setArray[i] = i + 1;
}
for (int j = 0; j < 1000; j++) {
// random 으로 1~45 중 2개의 수를 만든다.
int fstNm = (int) (Math.random() * 45);
int sndNm = (int) (Math.random() * 45);
int temp = setArray[fstNm];
setArray[fstNm] = setArray[sndNm];
setArray[sndNm] = temp;
}
for (int i = 0; i < 6; i++) {
System.out.print(setArray[i] + " ");
}
}
}
🧩2. for 문과 항 대차를 통한 거스름돈 계산
거스름돈을 계산하기위해 몫과 나머지를 이용한다.
- coinUnit 배열을 만들어 놓고, coinNum 배열에 필요한 개수를 넣습니다.
- 동전이 필요한 개수는 현재 금액을 coinUnit로 나눈 몫이 됩니다.
- 현재 금액에서 coinUnit와 몫을 곱한 숫자를 빼면 나머지 잔돈이 됩니다.
- 반복해서 작은 단위로 내려가며 동전의 개수를 구합니다.
/*
* 거스름돈을 몇개의 동전으로 지불할 수 있는지 계산
* 변수 money의 금액을 동전으로 바꾸었을때 몇개의 동전이 필요한지 출
* 가능한 적은 수의 동전을 거슬러 주어야 한다.
*/
public class Exercise1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] coinUnit = { 500, 100, 50, 10 };
int money = 2680;
int[] coinNum = new int[5];
for (int i = 0; i < coinUnit.length; i++) {
int change = (int) money / coinUnit[i];
int to_change = money - change * coinUnit[i];
coinNum[i] = change;
money = to_change;
}
for (int i = 0; i < coinNum.length; i++) {
System.out.print(coinUnit[i] + "\t");
System.out.println(coinNum[i] + "\t");
}
}
}
🧩3. 배열에 합계 행-열 추가하기
기존 배열보다 가로 세로 1칸이 더 많은 새로운 배열 생성
- 행별 합계는 동일한 열에 들어가므로 result[i][3] += score[i][j] 와 같이 누적합니다.
- 열별 합계는 동일한 행에 들어가므로 result[5][j] += score[i][j];와 같이 누적합니다.
- 총합계는 1자리 이므로 열과 행을 지정하여 result[5][3] += score[i][j];과 같이 누적합니다.
/*
* 주어진 2차원 배열의 데이터보다 가로 세로로 1이 더 큰배열을 생성해서
* 배열의 행과 열의 마지막 요소에 각 열과 행의 총합을 저장하고 출력 *
*/
public class Exercise2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] score = { { 100, 100, 100 }, { 20, 20, 20 }, { 30, 30, 30 }, { 40, 40, 40 }, { 50, 50, 50 } };
int[][] result = new int[score.length + 1][score[0].length + 1];
System.out.println("계산시작 " + score.length);
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
result[i][j] = score[i][j];
result[i][3] += score[i][j];
result[5][j] += score[i][j];
result[5][3] += score[i][j];
}
}
System.out.println("계산끝 ");
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.printf("%4d", result[i][j]);
}
System.out.println();
}
}
}
🧩4. 숫자 개수로 그래프 그리기
배열로 담고, 배열로 출력
- 인덱스와 숫자를 일치시켜 인덱스+1에 해당하는 숫자면 1씩 증가시킵니다.
- answer 배열을 돌아가면서 동일한 숫자는 숫자 인덱스에 값을 누적합니다.
- 출력할때는 배열에 들어 있는 숫자만큼 for 문을 돌며 *(아스타)를 가로로 출력합니다.
/*
*배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 '*'를 찍어 그래프를 그린다.
*/
public class Exercise3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
int[] counter = new int[4];
int count = 0;
for (int i = 0; i < answer.length; i++) {
for (int j = 0; j < counter.length; j++) {
if (answer[i] == j + 1) {
counter[j]++;
}
}
}
for (int j = 0; j < counter.length; j++) {
for (int k = 0; k < counter[j]; k++) {
System.out.print("*");
}
System.out.println();
}
}
}
🧩5. 알파벳과 숫자로 암호표 만들기
아스키 값을 이용해서 변환 (숫자 -'a', 문자-'a')
- 숫자는 아스키 값과 숫자가 동일합니다. 이점을 이용해서 숫자인지 문자인지 구분해서, 숫자와 문자의 변환글자를 가져옵니다.
public class Exercise4 {
public static void main(String[] args) {
// char[] abcCode =
// { '`','~','!','@','#','$','%','^','&','*',
// '(',')','-','_','+','=','|','[',']','{',
// '}',';',':',',','.','/'};
// char[] numCode = {'q','w','e','r','t','y','u','i','o','p'};
// char ch = 'y';
// if(ch>='0' && ch<='9') {
// System.out.println(numCode[ch-'0']);
// } else {
// System.out.println(abcCode[ch-'a']);
// }
char[] abcCode = { '`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '|', '[',
']', '{', '}', ';', ':', ',', '.', '/' };
// 0 1 2 3 4 5 6 7 8 9
char[] numCode = { 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p' };
String src = "abc123";
String result = "";
// 문자열 src의 문자를 charAt()으로 하나씩 읽어서 변환 후 result에 저장
for (int i = 0; i < src.length(); i++) {
char ch = src.charAt(i);
// System.out.println(ch);
if (ch >= '0' && ch <= '9') {
// 숫자로 넘기는 경우 ='0'
result += numCode[ch-'0'];
} else {
// 문자로 넘기는 경우 -'a'
result += abcCode[ch-'a'];
}
}
System.out.println("src:" + src);
System.out.println("result:" + result);
}
}
0 댓글