본문 바로가기

과제

추석 과제

1장

  1. 스캐너를 통해 입력받은 문자를 원하는 형태로 바꿔보기
    1. ( nextLine()을 이용하여 String으로만 받음)
    2. 스캐너를 통해 데이터 2건을 각각 입력 받는다.
    3. 콘솔창에 정수형 데이터 1~100사이의 값을 입력받은 뒤 입력 된 값을 정수형 변수 iData에 담고 출력
    4. 위 문제 해결 후 3.5를 콘솔에 입력 후 실수형 변수에 담고 출력
    -------------------출력결과(console)-------------------- 3 사용자가 입력 한 값 : 3 iData에 담긴 값 : iData (3) 3.5 사용자가 입력 한 값 : 3.5 dData변수에 담긴 값 : dData (3.5)
public class Step01 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		int iData = Integer.parseInt(str);
		System.out.println("사용자가 입력 한 값 : " + str);
		System.out.println("iData에 담긴 값 : iData (" + iData + ")");
		str = scan.nextLine();
		double dData = Double.parseDouble(str);
		System.out.println("사용자가 입력 한 값 : " + str);
		System.out.println("dData변수에 담긴 값 : dData ("+dData+")");
	}
}

A

  • 정수값은 int, 실수값은 double에 담는다. 문자열을 int로 변환하는 Integer, double로 변환하는 Double을 이용한다.
  1. 스캐너를 통해 두 수를 입력 받고 두 수를 비교하여 출력 하기. ( 삼항 연산자 이용해보기 )------------------출력결과(console)-------------------- 첫번째 숫자를 입력하세요 . 1 두번째 숫자를 입력하세요 . 10
  2. 1은 10보다 작습니다 . TRUE 1은 10보다 큽니다. FALSE 1과 10은 같습니다 . FALSE
  3. (※ if , switch등의 비교문은 사용 불가 ※)
package quest01;

import java.util.Scanner;

public class Step02 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("첫번째 숫자를 입력하세요.");
		String str1 = scan.nextLine();
		System.out.println("두번째 숫자를 입력하세요.");
		String str2 = scan.nextLine();
		int num1 = Integer.parseInt(str1);
		int num2 = Integer.parseInt(str2);
		String str3 = num1 < num2 ? "TRUE" : "FALSE";
		String str4 = num1 > num2 ? "TRUE" : "FALSE";
		String str5 = num1 == num2 ? "TRUE" : "FALSE";
		System.out.println(num1 + "은 " + num2 + "보다 작습니다. " + str3);
		System.out.println(num1 + "은 " + num2 + "보다 큽니다. " + str4);
		System.out.println(num1 + "과 " + num2 + "은 같습니다. " + str5);

	}
}

A

  • 문자열로 받은 정수를 숫자로 변환하여 저장한다.
  • 3항 연산자를 통해 문자열”TRUE”와 “FALSE”를 각각 저장하여 출력한다.

2장

  1. 조건문( if , switch )
    1. 스캐너를 통해 입력 된 값을 비교 하여 출력하는 프로그램을 작성 하시오. ( 값이 1 이면 '남자' 2이면 '여자',3이면 '남자,4이면 여자 그외 오류를 콘솔창에 출력하며 논리 연산자를 사용한다. )
    --------------------출력결과(console)-------------------- 입력 된 데이터 : 1 비교 후 데이터 : 남자 입니다.입력 된 데이터 : -1-----------------------------------------------------—
  2. 비교 후 데이터 : 입력 오류 입니다.
  3. 입력 된 데이터 : 2 비교 후 데이터 : 여자 입니다.
package quest02;

import java.util.Scanner;

public class Step01 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		while (true) {
			System.out.print("입력 된 데이터 : ");
			String str = scan.nextLine();
			int num = Integer.parseInt(str);
			System.out.print("비교 후 데이터 : ");
			if (num == 1 || num == 3) {
				System.out.println("남자 입니다.");
			} else if (num == 2 || num == 4) {
				System.out.println("여자 입니다.");
			} else {
				System.out.println("입력 오류 입니다.");
				break;
			}
			System.out.println();
		}
	}
}

A

  • 입력된 문자열을 정수로 받아준다.
  • if문의 조건을 || or 연산을 통하여 나열하고 각각 남자와 여자의 출력을 지정한다.
  1. 스캐너를 통해 각 각 userId , userPw를 입력 받습니다. 입력 받은 값을 비교해서 아이디가 admin 이고 비밀번호가 admin1234인 경우에는 관리자님 환영합니다. 아이디와 비밀번호가 일치 하지 않는 경우에는 잘못된 접근입니다를 출력하는 프로그램을 작성하시오.
    1. -------------------출력결과(console)-------------------- 아이디를 입력하세요 : admin 비밀번호를 입력하세요 : admin1234 로그인 중입니다. 관리자님 환영합니다. admin님 접속
    2. -------------------출력결과(console)-------------------- 아이디를 입력하세요 : admin 비밀번호를 입력하세요 :1234 로그인 중입니다. 잘못된 접근 입니다 아이디 또는 비밀번호를 확인 하세요.!!
package quest02;

import java.util.Scanner;

public class Step02 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		System.out.print("아이디를 입력하세요 : ");
		String userId = scan.nextLine();
		System.out.print("비밀번호를 입력하세요 : ");
		String userPw = scan.nextLine();
		System.out.println("로그인 중입니다.");
		if (userId.equals("admin")&&userPw.equals("admin1234")) {
			System.out.println("관리자님 환영합니다. admin님 접속");
		} else {
			System.out.println("잘못된 접근 입니다. 아이디 또는 비밀번호를 확인하세요!!");
		}
	}
}

A

  • 문자열을 각각 받아준다.
  • 받아준 문자열을 .equals()연산을 통해 값의 비교를 하여 일치하는 경우에만 접속으로 출력한다.
  1. 스캐너를 통해 각 각 dataA와 dataB에 정수를 입력 받고 두수를 비교 하여 출력 하는 프로그램을 작성 하세요. ( 출력 결과에서 제공하는 모든 숫자를 입력하고 똑같이 나오는지 확인 )
    1. -------------------출력결과(console)-------------------- 입력 된 데이터 : dataA: 10 , dataB : 20 비교 후 데이터 : dataA(10) < dataB(20)
    2. -------------------출력결과(console)-------------------- 입력 된 데이터 : dataA: 10 , dataB : 10 비교 후 데이터 : dataA(10) == dataB(10)
    3. -------------------출력결과(console)-------------------- 입력 된 데이터 : dataA: 20 , dataB : 10 비교 후 데이터 : dataA(20) > dataB(10)
package quest02;

import java.util.Scanner;

public class Step03 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str1 = scan.nextLine();
		String str2 = scan.nextLine();
		int dataA = Integer.parseInt(str1);
		int dataB = Integer.parseInt(str2);
		System.out.println("입력 된 데이터 : dataA: "+ dataA + " , dataB : "+ dataB);
		String calc = dataA>dataB?">":dataA<dataB?"<":"==";
		System.out.println("비교 후 데이터 : dataA: ("+ dataA +") "+ calc+" dataB : ("+ dataB+")");
	}
}

A

  • 받아준 문자열을 dataA와 dataB에 정수 형태로 변환하여 받아준다.
  • calc 문자열 변수에 3항 연산자를 이용하여 비교 결과를 저장하여 출력한다.
  1. 스캐너를 통해 자연수를 iData라는 변수에 입력받고 다음과 같이 출력 되는 프로그램을 작성하세요. (자연수는 반드시 0보다 크며 100보다는 작은 수를 입력하세요. )
    1. -------------------출력결과(console)-------------------- 입력 된 데이터 : 5 출력 데이터 : 5 , 4 , 3 , 2 , 1 , ★ ★★ ★★★ ★★★★ ★★★★★
package quest02;

import java.util.Scanner;

public class Step04 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.print("입력 된 데이터 : ");
		String str = scan.nextLine();
		int iData = Integer.parseInt(str);
		System.out.print("출력 데이터 : ");
		for (int i = 0; i<iData; i++) {
			System.out.print(iData-i+" , ");
		}
		System.out.println();
		String star = "★";
		for (int i = 0; i<iData; i++) {
			System.out.println(star);
			star +="★";
		}
	}
}

A

  • 받아준 문자열을 iData에 정수 형태로 변환하여 저장한다.
  • 반복문을 통해 iData에서 1까지 숫자를 출력하는 반복문을 작성한다.
  • star 문자열 변수에 ★를 저장하고, star를 출력하고 star에 복합대입연산자로 ★를 추가하는 반복문을 작성한다.
  1. 스캐너를 통해 각 각 dataA와 dataB에 정수를 입력 받고 두수를 사이의 누적합을 계산하는 프로그램을 작성 하세요.

(dataA와 dataB는 반드시 다른 수를 입력하며 dataA와 dataB 어느 수가 큰 수인지는 알수 없음)

-------------------출력결과(console)-------------------- 입력 된 데이터 : dataA: 5 , dataB : 10 출력 데이터 : 5 + 6 + 7 + 8 + 9 + 10 = 45 입니다.

-------------------출력결과(console)-------------------- 입력 된 데이터 : dataA: 10 , dataB : 5 출력 데이터 : 5 + 6 + 7 + 8 + 9 + 10 = 45 입니다.

package quest02;

import java.util.Scanner;

public class Step05 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str1 = scan.nextLine();
		String str2 = scan.nextLine();
		int dataA = Integer.parseInt(str1);
		int dataB = Integer.parseInt(str2);
		System.out.println("입력 된 데이터 : dataA: "+ dataA + ", dataB : "+ dataB);
		System.out.print("출력 데이터 : ");
		int from, to;
		int sum = 0;
		if (dataA<dataB) {
			from = dataA;
			to = dataB;
		} else {
			from = dataB;
			to = dataA;
		} 
		for (int i = from; i<=to; i++) {
			System.out.print(i);
			if (i==to) {
				sum += i;
				System.out.print(" = "+sum+" 입니다.");
			} else {
				System.out.print(" + ");
				sum += i;
			}
		}
	}
}

A

  • 받아준 문자열을 dataA와 dataB에 정수 형태로 변환하여 저장한다.
  • 각 값에 저장된 숫자를 출력한다.
  • int from과 to를 선언하고 출력할 합계 sum을 0으로 초기화한다.
  • 조건문을 통해 dataA와 dataB를 비교하고 작은 값을 from에, 큰 값을 to에 저장한다.
  • 반복문을 통해 from부터 시작하고 to와 같을 때 까지 반복하는 반복문을 작성하고 , i를 출력한다.
  • 조건문을 추가해 to와 같기 전 까지는 i 뒤에 +를 붙이고 sum에 i를 더한다.
  • to와 같아진 경우 sum에 i를 더한 후 = sum의 결과를 출력하도록 한다.

3장

  1. 0부터 9까지의 숫자 중 '일부'가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 출력 하도록 프로그램을 완성해주세요.
  2. 예시 : [1,2,3,4,6,7,8,0]
package quest03;

public class Step01 {
	public static void main(String[] args) {
		int[] numbers = {5,8,4,0,6,7,9};
		
		int sum =0;
		for (int i = 0; i<numbers.length; i++) {
			sum+=numbers[i];
		}
		System.out.println(45-sum);
		
	}
}

A

  • 0~9까지 수의 합은 45이다.
  • int sum=0으로 초기화하고, 각 배열의 값을 sum에 더하는 반복문을 작성한다.
  • 일부 없는 값의 합은 45에서 현재 있는 값의 합을 뺀 만큼이 된다.
  1. swap이라는 개념을 이용해서 1차원 배열에 들어있는 int값들을 오름 차순으로 정렬 하는 프로그램을 작성하세요.어떤 식으로 해도 상관은 없습니다. { 3 , 5 ,7 , 9 , 1 , 2 , 4 , 10}; 배열 준비 예시.
  2. 배열 정렬 후 결과 : { 1 , 2 , 3, 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
package quest03;

public class Step02 {
	public static void main(String[] args) {
		int[] numbers = { 3 , 5 ,7 , 9 , 1 , 2 , 4 , 10, 8};
		
		for (int i =0; i<numbers.length-1; i++) {
			for (int j=0; j<numbers.length-1; j++) {
				if (numbers[j] > numbers[j+1]) {
					int swap = numbers[j+1];
					numbers[j+1]=numbers[j];
					numbers[j] = swap;
				}
			}
		}
		for (int i = 0; i<numbers.length; i++) {
			System.out.print(numbers[i]+ " ");
		}
	}
}

A

  • 배열의 마지막 숫자가 맨 앞으로 오기까지 비교 연산 최대는 length-1이고, 비교를 2 수를 하기 때문에 length-1만큼 반복된다.
  • 각 배열의 j, j+1번을 비교하여 j+1이 더 작은 경우 j와 j+1을 교체하는 반복문을 만든다.
  • 배열 정리 후 반복문을 이용하여 각 배열의 값을 출력한다.
  1. Kakao 알고리즘 문제.
    1. 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3"
    2. 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자 영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine
package quest03;

import java.util.Scanner;

public class Step03 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		char[] kakao = new char[str.length()];
		for (int i = 0; i < str.length(); i++) {
			kakao[i] = str.charAt(i);
		}
		String[] spell = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < kakao.length - spell[i].length() + 1; j++) {
				if (numberChange(kakao, spell[i], j)) {
					for (int k = 0; k < spell[i].length(); k++) {
						if (k == 0) {
							kakao[j] = (char)(i+'0');
						} else {
							kakao[j + k] = 'a';
						}
					}
				}
			}
		}
		for (int i = 0; i < str.length(); i++) {
			if (kakao[i] == 'a') {
				continue;
			} else {
				System.out.print(kakao[i]);
			}
		}
	}

	public static boolean numberChange(char[] Arr, String str, int t) {
		char[] chars = new char[str.length()];
		for (int i = 0; i < str.length(); i++) {
			chars[i] = str.charAt(i);
		}
		int count = 0;
		for (int i = 0; i < str.length(); i++) {
			if (Arr[i + t] == chars[i]) {
				count++;
			}
		}
		if (count == str.length()) {
			return true;
		} else {
			return false;
		}
	}
}

A

  • 문자열을 받아서 저장하고, char배열에 각 문자열의 내용을 저장한다.
  • 문자열 배열 spell을 선언하고 0~9까지의 숫자 영문으로 초기화한다.
  • char배열, 문자열, int를 받아서 boolean으로 출력하는 메소드를 만든다.
  • char 배열을 새로 만들고 문자열의 각 char 값을 대입한다.
  • 반복문을 만들고 문자열의 길이만큼 반복하도록 한다.
  • 메소드로 받은 char 배열의 i+t번째 와 문자열을 분해한 char배열의 i번째가 반복문 모두에서 일치한 경우 true, 아닐 경우 false를 return하는 반복문을 만든다. int count를 이용하여 반복 회수에 맞춰 일치했는지 체크하도록 한다.
  • 0~9까지의 반복문을 만든다.
  • 입력받은 값을 저장한 char배열 길이와 각 숫자의 길이를 고려해 반복 회수가 바뀌는 반복문을 만들고, 내부에 메소드를 조건으로 하는 조건문을 작성한다.
  • 조건이 true일 경우 해당 부분의 첫 char 값을 0~9까지의 값으로 지정하고, 나머지는 ‘a’로 대입하는 반복문을 만든다.
  • 모든 영문 숫자를 변환한 후 반복문을 만들어 ‘a’를 제외한 숫자 부분만을 출력하도록 하는 반복문을 만든다.
  1. 배열 A와 배열B를 다음 그림을 참고하여 생성하고 , 배열의 합 구하기.

package quest03;

public class Step04 {
	public static void main(String[] args) {
		int[] intArr1 = { 3, -1, 2, 4 };
		int[] intArr2 = { 2, 1, -3, 2 };
		int[] arrAPlusB = new int[4];
		for (int i = 0; i < intArr1.length; i++) {
			arrAPlusB[i] = intArr1[i] + intArr2[i];
			System.out.print(arrAPlusB[i] + " ");
		}
	}
}

A

  • 일반적인 배열의 덧셈은 각 자리의 숫자를 서로 더하여 표시한다.
  • 결과를 받을 배열을 선언하고 초기화한다.
  • 반복문을 만들어 각 배열의 같은 자리의 값을 더하여 새로 만든 배열에 대입하고 출력한다.

'과제' 카테고리의 다른 글

231107 - Java mini project : 쇼핑몰 만들기  (0) 2023.11.07
Oracle 조회 점검 과제  (1) 2023.10.26