simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바프로그램
  • 자바프로그래밍
  • 404
  • null
  • controllerTest
  • 참조변수
  • 자바메모리구조
  • 참조타입
  • scanner #next() #nextLine()
  • 스프링
  • JVM메모리구조
  • 컨트롤러
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234
Language/Java

[자바의정석_예제] 배열

[자바의정석_예제] 배열
Language/Java

[자바의정석_예제] 배열

2022. 3. 20. 14:17

[5-1] 다음은 배열을 선언하거나 초기화한 것이다 잘못된 것을 고르고 그 이유를 설명하시오. 

a. int[] arr[];
b. int[] arr = {1,2,3,};
c. int[] arr = new int[5];
d. int[] arr = new int[5]{1,2,3,4,5};
e. int arr[5];
f. int[] arr[] = new int[3][];  
더보기
답) d,e

이유)

d : new int[ ]의 [ ] 안에 배열의 갯수를 지정할 수 없다.

e : [ ]안에 갯수를 넣을 수 없다.



*f. int[] arr[] = new int[3][];  //이건 가능한데, int[] arr[] = new int[][3]; 는 불가능

 

[5-2] 다음과 같은 배열이 있을 때 arr[3].length의 값은 얼마인가 , 

int[][] arr = {
    { 5, 5, 5, 5, 5},
    { 10, 10, 10},
    { 20, 20, 20, 20},
    { 30, 30}
}
더보기

답)

2

 

[5-3] 배열에 담긴 모든 값을 더하는 프로그램을 완성하시오. (실행결과 : 150)

class Exercise5_3
{
    public static void main(String[] args)
    {
        int[] arr = {10, 20, 30, 40, 50};
        int sum = 0;
        /*
            (1) . 알맞은 코드를 넣어 완성하시오
        */
        System.out.println("sum="+sum);
    }
}

 

더보기

답)

for(int i = 0; i < arr.length; i++) 
{
    sum += arr[i];
}

 

 

[5-4] 2차원 배열에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오

(실행 결과 : 

total=325
average=16.25)

package arrayex;

class Exercise5_4
{
	public static void main(String[] args)
	{
		int[][] arr = {
			{ 5, 5, 5, 5, 5},
			{10,10,10,10,10},
			{20,20,20,20,20},
			{30,30,30,30,30}
		};
		int total = 0;
		float average = 0;
		/*
		(1) . 알맞은 코드를 넣어 완성하시오
		*/
		System.out.println("total="+total);
		System.out.println("average="+average);
	} // end of main
} // end of class

 

더보기

답)

int total_length = 0;
		
for(int i = 0; i < arr.length; i++) {
    for(int j = 0; j < arr[i].length; j++) {
        total += arr[i][j];
        total_length++;
    }
}

average = (float)(total/total_length);

 

 

 

[5-5] 다음은 과 사이의 중복되지 않은 숫자로 이루어진 자리 숫자를 만들어내는 프로그램이다 (1)~(2) 에 알맞은 코드를 넣어서 프로그램을 완성하시오 . 

package arrayex;

class Exercise5_4 {
public static void main(String[] args) {
		int[] ballArr = {1,2,3,4,5,6,7,8,9};
		int[] ball3 = new int[3];
		
		// ballArr . 배열 의 임의의 요소를 골라서 위치를 바꾼다
		for(int i=0; i< ballArr.length;i++) {
			int j = (int)(Math.random() * ballArr.length);
			int tmp = 0;
			/*
			(1) . 알맞은 코드를 넣어 완성하시오
			*/
		}
		// ballArr 3 ball3 . 배열 의 앞에서 개의 수를 배열 로 복사한다
		/* (2) */
		for(int i=0;i<ball3.length;i++) {
			System.out.print(ball3[i]);
		}
	} // end of main
} // end of class
더보기

답)

package arrayex;

class Exercise5_4 {
public static void main(String[] args) {
		int[] ballArr = {1,2,3,4,5,6,7,8,9};
		int[] ball3 = new int[3];
		
		// 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다
		for(int i=0; i< ballArr.length;i++) {
			int j = (int)(Math.random() * ballArr.length);
			int tmp = 0;
			tmp = ballArr[i];
			ballArr[i] = ballArr[j];
			ballArr[j] = tmp;
		}
		//  배열 ballArr 의 앞에서 3 개의 수를 배열 ball3로 복사한다
		System.arraycopy(ballArr, 0, ball3, 0, 3);
		
		for(int i=0;i<ball3.length;i++) {
			System.out.print(ball3[i]);
		}
	} // end of main
} // end of class

 

[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라 (단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다.)

(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

package arrayex;

class Exercise5_6 {
public static void main(String args[]) {
		// . 큰 금액의 동전을 우선적으로 거슬러 줘야한다
		int[] coinUnit = {500, 100, 50, 10};
		
		int money = 2680;
		System.out.println("money="+money);
		
		for(int i=0;i<coinUnit.length;i++) {
		/*
		(1) . 알맞은 코드를 넣어 완성하시오
		*/
		}
	} // main
}

>> 실행결과

money=2680
500 : 5 원
100 : 1 원
50 : 1 원
10 : 3
더보기

답)

for(int i=0;i<coinUnit.length;i++) {
    if(money >= coinUnit[i]) {
        System.out.printf("%d원:%d%n",coinUnit[i],money/coinUnit[i]);
        money = money%coinUnit[i];
    }
}

 

[5-7] 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, '거스름돈이 부족합니다.'라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.

class Exercise5_7 {
	public static void main(String args[]) {
		if (args.length != 1) {
			System.out.println("USAGE: java Exercise5_7 3120");
			System.exit(0);
		}

		// 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
		int money = Integer.parseInt(args[0]);

		System.out.println("money=" + money);

		int[] coinUnit = { 500, 100, 50, 10 }; // 동전의 단위
		int[] coin = { 5, 5, 5, 5 }; // 단위별 동전의 개수

		for (int i = 0; i < coinUnit.length; i++) {
			int coinNum = 0;
			/*
			 * (1)아래의 로직에 맞게 코드를 작성하시오. 
			 * 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다. 
			 * 2. 배열 coin에서 coinNum만큼의 동전을 뺀다. (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.) 
			 * 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
			 */

			System.out.println(coinUnit[i] + "원: " + coinNum);
		}

		if (money > 0) {
			System.out.println("거스름돈이 부족합니다 ");
			System.exit(0); // 프로그램을 종료한다.
		}
		System.out.println("= 남은 동전의 개수 =");

		for (int i = 0; i < coinUnit.length; i++) {
			System.out.println(coinUnit[i] + "원:" + coin[i]);
		}
	} // main
}

>> 실행결과

C:\jdk1.8\work\ch5>java Exercise5_7
USAGE: java Exercise5_7 3120
C:\jdk1.8\work\ch5>java Exercise5_7 3170
money=3170
500 : 5 원
100 : 5 원
50 : 3 원
10 : 2 원
= = 남은 동전의 개수
500 :0 원
100 :0 원
50 :2 원
10 :3 원
C:\jdk1.8\work\ch5>java Exercise5_7 3510
money=3510
500 : 5 원
100 : 5 원
50 : 5 원
10 : 5 원
거스름돈이 부족합니다.
더보기
class Exercise5_7 {
	public static void main(String args[]) {
		if (args.length != 1) {
			System.out.println("USAGE: java Exercise5_7 3120");
			System.exit(0);
		}

		// 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
		int money = Integer.parseInt(args[0]);

		System.out.println("money=" + money);

		int[] coinUnit = { 500, 100, 50, 10 }; // 동전의 단위
		int[] coin = { 5, 5, 5, 5 }; // 단위별 동전의 개수

		for (int i = 0; i < coinUnit.length; i++) {
			int coinNum = 0;

			coinNum = money % coinUnit[i];
			coin[i] -= coinNum;
			money -= coinUnit[i]*coinNum;

			System.out.println(coinUnit[i] + "원: " + coinNum);
		}

		if (money > 0) {
			System.out.println("거스름돈이 부족합니다 ");
			System.exit(0); // 프로그램을 종료한다.
		}
		System.out.println("= 남은 동전의 개수 =");

		for (int i = 0; i < coinUnit.length; i++) {
			System.out.println(coinUnit[i] + "원:" + coin[i]);
		}
	} // main
}

 

[5-8] 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 '*'을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.

class Exercise5_8 {
	public static void main(String[] args) {
		int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
		int[] counter = new int[4];
		for (int i = 0; i < answer.length; i++) {
			/* (1) 알맞은 코드를 넣어 완성하시오. */
		}
		for (int i = 0; i < counter.length; i++) {
			/* 알맞은 코드를 넣어 완성하시오 (2) . */
			System.out.println();
		}
	}
}

>> 실행결과

3***
2**
2**
4****
더보기
class Exercise5_8 {
	public static void main(String[] args) {
		int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
		int[] counter = new int[4];
		
		for (int i = 0; i < answer.length; i++) {
			counter[answer[i]-1]++;
		}
		for (int i = 0; i < counter.length; i++) {
			System.out.print(counter[i]+":");
			for(int j = 0; j < counter[i]; j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

 

[5-9] 주어진 배열을 시계방향으로 90도 회전시켜서 출력하는 프로그램을 완성하시오.

class Exercise5_9 {
	public static void main(String[] args) {
		char[][] star = { 
				{ '*', '*', ' ', ' ', ' ' },
				{ '*', '*', ' ', ' ', ' ' }, 
				{ '*', '*', '*', '*', '*' },
				{ '*', '*', '*', '*', '*' } 
		};
		char[][] result = new char[star[0].length][star.length];
		for (int i = 0; i < star.length; i++) {
			for (int j = 0; j < star[i].length; j++) {
				System.out.print(star[i][j]);
			}
			System.out.println();
		}
		System.out.println();
		for (int i = 0; i < star.length; i++) {
			for (int j = 0; j < star[i].length; j++) {
				/* 알맞은 코드를 넣어 완성하시오 (1) . */
			}
		}
		for (int i = 0; i < result.length; i++) {
			for (int j = 0; j < result[i].length; j++) {
				System.out.print(result[i][j]);
			}
			System.out.println();
		}
	}
}

>> 실행결과

** 
**
***** 
*****

**** 
**** 
** 
** 
**
더보기
package arrayex;

public class Exercise5_9 {

public static void main(String[] args) {
		char[][] star = { 
				{ '*', '*', ' ', ' ', ' ' },
				{ '*', '*', ' ', ' ', ' ' }, 
				{ '*', '*', '*', '*', '*' },
				{ '*', '*', '*', '*', '*' } 
		};
		char[][] result = new char[star[0].length][star.length];
		for (int i = 0; i < star.length; i++) {
			for (int j = 0; j < star[i].length; j++) {
				System.out.print(star[i][j]);
			}
			System.out.println();
		}
		System.out.println();
		for (int i = 0; i < star.length; i++) {
			for (int j = 0; j < star[i].length; j++) {
				result[j][star.length-1-i]=star[i][j];
			}
		}
		for (int i = 0; i < result.length; i++) {
			for (int j = 0; j < result[i].length; j++) {
				System.out.print(result[i][j]);
			}
			System.out.println();
		}
	}

}

 

[5-10] 다음은 알파벳과 숫자를 아래에 주어진 암호표로 암호화하는 프로그램이다. (1)에 알맞은 코드를 넣어서 완성하시오.

class Exercise5_10 {
	public static void main(String[] args) {
		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);
			/* (1) 알맞은 코드를 넣어 완성하시오 . */
		}

		System.out.println("src:" + src);
		System.out.println("result:" + result);
	} // end of main
} // end of class

>> 실행결과

src:abc123 
result:`~!wer
더보기
package arrayex;

public class Exercise5_10 {

	public static void main(String[] args) {
		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 = "";
		StringBuffer buffer = new StringBuffer(src.length());

		// 문자열 src의 문자를 charAt()으로 하나씩 읽어서 변환 후 result에 저장
		for (int i = 0; i < src.length(); i++) {
			char ch = src.charAt(i);
			if(ch >= '0' && ch <='9') {
				buffer.append(numCode[ch-'0']);
			}else {
				buffer.append(abcCode[ch-'a']);
			}
		}
		result = buffer.toString();

		System.out.println("src:" + src);
		System.out.println("result:" + result);
	}

}

 

[5-11] 주어진 2차원 배열의 데이터보다 가로와 세로로 1이 더 큰 배열을 생성해서 배열의 행과 열의 마지막 요소에 각 열과 행의 총합을 저장하고 출력하는 프로그램이다. (1)에 알맞은 코드를 넣어서 완성하시오.

class Exercise5_11 {
	public static void main(String[] args) {
		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];
		
		for (int i = 0; i < score.length; i++) {
			for (int j = 0; j < score[i].length; j++) {
				
				/* 알맞은 코드를 넣어 완성하시오 (1) . */
				
			}
		}
		
		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();
		}
	} // main }
}

>> 실행결과

100 100 100 300 
20 20 20 60 
30 30 30 90 
40 40 40 120 
50 50 50 150 
240 240 240 720
더보기
package arrayex;

public class Exercise5_11 {

	public static void main(String[] args) {
		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];
		
		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][score[i].length]+=result[i][j];
					result[score.length][j] += result[i][j];
					result[score.length][result[0].length-1] += result[i][j];
			}
		}
		
		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();
		}
	}

}

 

[5-13] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.

import java.util.Scanner;

class Exercise5_13 {
	public static void main(String args[]) {
		String[] words = { "television", "computer", "mouse", "phone" };

		Scanner scanner = new Scanner(System.in);

		for (int i = 0; i < words.length; i++) {
			char[] question = words[i].toCharArray(); // String을 char[]로 변환

			/*
			 * (1) 알맞은 코드를 넣어 완성하시오 . char배열 question에 담긴 문자의 위치를 임의로 바꾼다.
			 */

			System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(
					question));
			String answer = scanner.nextLine();

			// trim()으로 answer의 좌우 공백을 제거한 후 , equals로 word[i]와 비교
			if (words[i].equals(answer.trim()))
				System.out.printf("맞았습니다.%n%n");
			else
				System.out.printf("틀렸습니다.%n%n");
		}
	} // main의 끝
}

>> 실행결과

Q1. lvtsieeoin의 정답을 입력하세요.>television 
맞았습니다.

Q2. otepcumr의 정답을 입력하세요.>computer 
맞았습니다.

Q3. usemo 의 정답을 입력하세요.>asdf 
틀렸습니다.
Q4. ohpne 의 정답을 입력하세요.>phone 
맞았습니다.
더보기
package arrayex;

import java.util.Scanner;

class Exercise5_13 {
	public static void main(String args[]) {
		String[] words = { "television", "computer", "mouse", "phone" };

		Scanner scanner = new Scanner(System.in);

		for (int i = 0; i < words.length; i++) {
			char[] question = words[i].toCharArray(); // String을 char[]로 변환

			for(int j = 0; j < question.length; j++) {
				char tmp = ' ';
				int ran = (int)(Math.random()*question.length);
				tmp = question[j];
				question[j] = question[ran];
				question[ran] = tmp;
			}

			System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(
					question));
			String answer = scanner.nextLine();

			// trim()으로 answer의 좌우 공백을 제거한 후 , equals로 word[i]와 비교
			if (words[i].equals(answer.trim()))
				System.out.printf("맞았습니다.%n%n");
			else
				System.out.printf("틀렸습니다.%n%n");
		}
	} // main의 끝
}

 

 

[참조]

- [자바의 정석], 남궁석 지음

- 블로그 https://codechobo.tistory.com/1

 

'Language > Java' 카테고리의 다른 글

[자바의 정석_예제] 연산자  (0) 2022.03.21
[자바의 정석_예제] 변수  (0) 2022.03.21
[자바_문법] 배열  (0) 2022.03.20
[자바_문법] 향상된 for문 (JDK 5.0이상, 배열 및 컬렉션/맵에 사용)  (0) 2022.03.19
[자바_복습] JVM 메모리 구조 정리  (0) 2022.03.19
    'Language/Java' 카테고리의 다른 글
    • [자바의 정석_예제] 연산자
    • [자바의 정석_예제] 변수
    • [자바_문법] 배열
    • [자바_문법] 향상된 for문 (JDK 5.0이상, 배열 및 컬렉션/맵에 사용)
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.