1. 총합과 평균
import java.util.Scanner;
//총점, 평균 구하기
public class Ex5_5 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int sum=0;
float average=0;
//점수 갯수 입력 받기
System.out.print("총점과 평균을 계산할 점수의 갯수를 입력하세요(0~20억)> ");
String counts=scanner.nextLine();
int count=Integer.parseInt(counts);
//점수값들 입력받기
int[]score=new int[count];
for(int i=0;i<score.length;i++){
System.out.printf("계산할 점수를 입력하세요(정수)[%d]> ",i+1);
String num=scanner.nextLine();
score[i]=Integer.parseInt(num);
}
//총점과 평균 계산
for(int i=0;i<score.length;i++){
sum+=score[i];
}
average=(float)sum/score.length; //정확한 평균 계산을 위해 float 형변환 주의!
System.out.println("총점: "+sum);
System.out.println("평균: "+average);
}
}
총점과 평균을 계산할 점수의 갯수를 입력하세요(0~20억)> 5
계산할 점수를 입력하세요(정수)[1]> 75
계산할 점수를 입력하세요(정수)[2]> 80
계산할 점수를 입력하세요(정수)[3]> 96
계산할 점수를 입력하세요(정수)[4]> 58
계산할 점수를 입력하세요(정수)[5]> 88
총점: 397
평균: 79.4
종료 코드 0(으)로 완료된 프로세스
- 평균 구할 때, float 형으로 형변환 하는 것 주의
2. 최대값, 최소값 구하기
import java.util.Scanner;
//최대값 최소값 구하기
public class Ex5_6 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int sum=0;
float average=0;
//점수 갯수 입력 받기
System.out.print("최대값과 최소값을 계산할 점수의 갯수를 입력하세요(0~20억)> ");
String counts=scanner.nextLine();
int count=Integer.parseInt(counts);
//점수값들 입력받기
int[]score=new int[count];
for(int i=0;i<score.length;i++){
System.out.printf("숫자들을 입력하세요(정수)[%d]> ",i+1);
String num=scanner.nextLine();
score[i]=Integer.parseInt(num);
}
//최대값 최소값 계산
int max=score[0], min=score[0];
for(int i=0;i<score.length;i++){
if(score[i]>max){
max=score[i];
} else if (score[i]<min) {
min=score[i];
}
}
System.out.println("최대값: "+max);
System.out.println("최소값: "+min);
}
}
최대값과 최소값을 계산할 점수의 갯수를 입력하세요(0~20억)> 7
숫자들을 입력하세요(정수)[1]> 134
숫자들을 입력하세요(정수)[2]> 15
숫자들을 입력하세요(정수)[3]> 24
숫자들을 입력하세요(정수)[4]> 56
숫자들을 입력하세요(정수)[5]> 2456
숫자들을 입력하세요(정수)[6]> 456
숫자들을 입력하세요(정수)[7]> 34
최대값: 2456
최소값: 15
종료 코드 0(으)로 완료된 프로세스
- 최대값과 최소값을 계산하기 위한 별도의 변수 선언해서 배열의 값들과 순서대로 비교하면서 최대값과 최소값을 찾는 개념
3. 섞기
3-1. 배열의 첫번째 값과 무작위 순서 값을 섞기
import java.util.Arrays;
//랜덤으로 섞기
public class Ex5_7 {
public static void main(String[] args) {
//0~9까지 배열 생성
int[]arr={0,1,2,3,4,5,6,7,8,9};
int trynum=100;
System.out.println("arr="+ Arrays.toString(arr));
//0~9까지 임의의 수 생성해서 arr[0]번째와 n번째 수를 trynum만큼 계속 섞기
for(int i=0;i<trynum;i++){
int n=(int)(Math.random()*10);
int tmp=arr[0];
arr[0]=arr[n];
arr[n]=tmp;
}
System.out.println("arr="+ Arrays.toString(arr));
}
}
arr=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr=[2, 4, 6, 7, 8, 1, 9, 5, 3, 0]
종료 코드 0(으)로 완료된 프로세스
- 첫번째 값과 무작위 번째 값의 자리를 바꾸기 위해 tmp라는 새로운 변수 필요(두 변수 자리 바꿀 때와 같은 개념)
3-2. 로또번호 추첨
//로또번호 만들기
public class Ex5_8 {
public static void main(String[] args) {
//1~45번호가 있는 배열 만들기
int[]arr=new int[45];
for(int i=0;i<arr.length;i++){
arr[i]=i+1;
}
//배열을 무작위로 섞고 무작위로 6개 뽑기
int j=0; //무작위 수 저장
int tmp=0; //자리바꿀 때 임시변수
int trynum=100; //섞을 횟수
for(int i=0;i<trynum;i++){
j=(int)((Math.random()*44)+1); //0~44 중 무작위 수 생성
//arr[0]와 arr[j] 자리 바꾸기
tmp=arr[0];
arr[0]=arr[j];
arr[j]=tmp;
}
for(int i=0;i<6;i++){
System.out.printf("%d번 공=%d%n",i+1,arr[i]);
}
}
}
1번 공=7
2번 공=33
3번 공=6
4번 공=44
5번 공=34
6번 공=36
종료 코드 0(으)로 완료된 프로세스
- 1~45중 무작위로 순서를 섞어서 앞에 6개만 뽑아오겠다는 건데 그냥 랜덤으로 번호를 뽑을거라면
for(int i=0;i<6;i++){
j=(int)((Math.random()*44)+1); //0~44 중 무작위 수 생성
System.out.printf("%d번 공=%d%n",i+1,arr[j]);
}
- 그냥 이렇게 1~45중 무작위로 위치한 공을 뽑으면 될 듯
(섞는거 연습해야 해서 억지로 섞고 앞에 6개만 뽑는 예제인 것 같다는 생각)
4. 정렬
import java.util.Arrays;
//정렬하기 (버블정렬)
public class Ex5_10 {
public static void main(String[] args) {
//0~9까지 랜덤으로 10개를 가지는 배열 생성 후 초기화
int[]arr=new int[10];
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*10);
}
System.out.println(Arrays.toString(arr));
//정렬하기
for(int i=0;i<arr.length-1;i++){
boolean changed=false; //자리변경 여부 확인
for(int j=0;j<arr.length-1-i;j++){
//왼쪽 숫자가 오른쪽보다 크면 자리 바꿈
if(arr[j]>arr[j+1]){
int tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
changed=true;
}
}
if(!changed){break;} //더이상 자리바꿈이 없으면 정렬 멈춤
System.out.println(Arrays.toString(arr));
}
}
}
[5, 3, 5, 9, 6, 3, 6, 1, 8, 3]
[3, 5, 5, 6, 3, 6, 1, 8, 3, 9]
[3, 5, 5, 3, 6, 1, 6, 3, 8, 9]
[3, 5, 3, 5, 1, 6, 3, 6, 8, 9]
[3, 3, 5, 1, 5, 3, 6, 6, 8, 9]
[3, 3, 1, 5, 3, 5, 6, 6, 8, 9]
[3, 1, 3, 3, 5, 5, 6, 6, 8, 9]
[1, 3, 3, 3, 5, 5, 6, 6, 8, 9]
종료 코드 0(으)로 완료된 프로세스
- 처음부터 순서대로 바로 뒤에 숫자와 비교해서 크면 뒤로 옮겨가는 방식(버블정렬)
- 간단하지만 비효율적 (배열의 길이가 n일 때, n-1번의 비교를 점점 하나씩 줄여가면서 n번 실행해야 함)
5. 빈도수 구하기
import java.util.Arrays;
//빈도 구하기
public class Ex5_11 {
public static void main(String[] args) {
int[]arr=new int[10];
int[]counter=new int[arr.length];
//arr에 0~9까지 임의의 수 10개 초기화
for(int i=0;i<arr.length;i++){
arr[i]=(int)(Math.random()*10);
}
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//임의로 생성된 배열값을 확인해서 counter 배열을 이용해 갯수 세기
for(int i=0;i<arr.length;i++){
counter[arr[i]]++;
}
//결과 출력
for(int i=0;i<arr.length;i++){
System.out.printf("%d의 개수:%d%n",i,counter[i]);
}
}
}
[1, 1, 2, 2, 3, 5, 6, 7, 7, 9]
0의 개수:0
1의 개수:2
2의 개수:2
3의 개수:1
4의 개수:0
5의 개수:1
6의 개수:1
7의 개수:2
8의 개수:0
9의 개수:1
종료 코드 0(으)로 완료된 프로세스
- 배열과 동일한 길이의 counter 배열 생성 후 각 위치에 해당하는 숫자를 세는 방법
- counter[arr[i]]++; 이 코드가 핵심
*위의 예제는 배열이 정수라서 가능한 건데 그럼 char 형이나 String인 경우에는 어떻게 빈도수를 구하지?! 하는 물음이 들어서 고미하다가 지피티씨한테 물어봤으나 hashset 이나 indexof 같은 아직 공부 안한게 나와서 다음 기회에....
라고 생각했으나...
이해는 못해도 구현은 할 수있는게(?) AI시대의 개발자의 모습 아닌가....?
고유값을 가지는 배열을 생성하는 부분만 지피티씨의 친절한 도움과 함께 코드 완성
//숫자가 아닌 char형이나 String인 배령인 경우에는 빈도수를 어떻게 세지???
//1. 고유값만을 가지는 배열을 만들고 2. 원래 배열과 새로운 배열을 비교해서 개수를 세서 counter배열(새로운 배열과 같은 길이)에 저장해서 출력
public class Ex5_11_3 {
public static void main(String[] args) {
char[]arr={'a','b','c','d','e','b','c','e','b','c'};
for(int i=0;i<arr.length;i++){
System.out.printf("%c,",arr[i]);
}
System.out.println();
//고유값을 가지는 uniqueArr배열 만들기
String unique="";
for(char c:arr){
if(unique.indexOf(c)==-1){
unique+=c;
}
}
char[]uniqueArr=unique.toCharArray();
int[]counter=new int[uniqueArr.length];
//arr배열과 uniqueArr배열을 비교해서 counter 배열에 숫자 세기
for(int i=0;i<uniqueArr.length;i++){
for(int j=0;j<arr.length;j++)
if(uniqueArr[i]==arr[j]){
counter[i]++;
}
}
//결과 출력
for(int i=0;i<uniqueArr.length;i++){
System.out.printf("%c의 개수:%d%n",uniqueArr[i],counter[i]);
}
}
}
a,b,c,d,e,b,c,e,b,c,
a의 개수:1
b의 개수:3
c의 개수:3
d의 개수:1
e의 개수:2
종료 코드 0(으)로 완료된 프로세스
- char 형
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
//숫자가 아닌 char형이나 String인 배령인 경우에는 빈도수를 어떻게 세지???
//1. 고유값만을 가지는 배열을 만들고 2. 원래 배열과 새로운 배열을 비교해서 개수를 세서 counter배열(새로운 배열과 같은 길이)에 저장해서 출력
public class Ex5_11_3 {
public static void main(String[] args) {
String[]arr={"hi","Hi","hi","HI","hi","hi","HI","hI","hI","hI"};
for(String str:arr){System.out.printf("%s,",str);}
System.out.println();
//고유값을 가지는 uniqueArr배열 만들기
// 중복 제거 및 순서 유지
Set<String> set = new LinkedHashSet<>(Arrays.asList(arr));
// Set → 새로운 배열
String[] uniqueArr = set.toArray(new String[0]);
// 출력
System.out.println("고유값 배열: " + Arrays.toString(uniqueArr));
//arr배열과 uniqueArr배열을 비교해서 counter 배열에 숫자 세기
int[]counter=new int[uniqueArr.length];
for(int i=0;i<uniqueArr.length;i++){
for(int j=0;j<arr.length;j++)
if(uniqueArr[i].equals(arr[j])){
counter[i]++;
}
}
//결과 출력
for(int i=0;i<uniqueArr.length;i++){
System.out.printf("%s의 개수:%d%n",uniqueArr[i],counter[i]);
}
}
}
hi,Hi,hi,HI,hi,hi,HI,hI,hI,hI,
고유값 배열: [hi, Hi, HI, hI]
hi의 개수:4
Hi의 개수:1
HI의 개수:2
hI의 개수:3
종료 코드 0(으)로 완료된 프로세스
- String 형