2023.06.09.금.TIL

heeh·2023년 6월 9일

TIL

목록 보기
18/82
post-thumbnail

특강에서 최대한 해답 코드를 안보고 코딩했다고 말씀하셔서, 안보고 코딩하면서 공부해 보자!

변수 응용 문제 풀어보기

  • 학생들의 성적을 관리하는 프로그램을 작성해야 합니다.
    각 학생은 이름과 국어, 영어, 수학 점수를 가지고 있습니다.
    이 정보를 저장하기 위한 변수를 어떻게 선언해야 할까요?
  • 문제 풀어보기
    public class Main {
        public static void main(String[] args) {
            String name;
            double koreaScore;
            double englishScore;
            double mathScore;
        }
    }
  • String studentName;
    int koreanScore;
    int englishScore;
    int mathScore;

데이터 유형 응용 문제

문제1

은행 계좌 정보를 관리하는 프로그램을 작성해야 합니다.
각 계좌는 계좌 번호, 예금주 이름, 잔액 정보를 가지고 있습니다.
이 정보를 저장하기 위한 변수를 어떻게 선언해야 할까요?
어떤 데이터 유형을 사용해야 할까요?

  • 문제 풀어보기
    public class Main {
        public static void main(String[] args) {
           int cont;
           String name;
           int money;
        }
    }
  • String accountNumber;
    String accountHolderName;
    double balance;
  • 질문/해설
    • 계좌번호는 '번호' 인데 왜 문자열로 선언해야 해?

      숫자와 하이픈 등의 특수문자를 포함할 수 있는 경우가 많습니다.
      예를 들어, 계좌 번호가 "123-45678" 또는 "987654321"과 같은 형식일 수 있습니다.
      이러한 이유로 계좌 번호를 문자열(String)로 선언하는 것이 적합합니다.

문제2

은행 계좌 정보를 관리하는 프로그램을 작성해야 합니다.
각 계좌는 계좌 번호, 예금주 이름, 잔액 정보를 가지고 있습니다.
프로그램은 사용자로부터 계좌 번호, 예금주 이름, 초기 잔액을 입력받아 계좌를 생성하고, 생성된 계좌 정보를 출력해야 합니다.
이를 위해 어떤 변수를 선언하고 어떤 데이터 유형을 사용해야 할까요?

  • 계좌 번호는 문자열(String)로 선언되어야 합니다.
  • 예금주 이름은 문자열(String)로 선언되어야 합니다.
  • 잔액은 실수(double)로 선언되어야 합니다.
-- 계좌 정보 --
계좌 번호: 123-45678
예금주 이름: John Doe
잔액: 1000.0
  • 해설
    import java.util.Scanner;
    
    public class BankAccount {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("계좌 번호를 입력하세요: ");
            String accountNumber = scanner.nextLine();
    
            System.out.print("예금주 이름을 입력하세요: ");
            String accountHolderName = scanner.nextLine();
    
            System.out.print("초기 잔액을 입력하세요: ");
            double balance = scanner.nextDouble();
    
            System.out.println("-- 계좌 정보 --");
            System.out.println("계좌 번호: " + accountNumber);
            System.out.println("예금주 이름: " + accountHolderName);
            System.out.println("잔액: " + balance);
    
            scanner.close();
        }
    }

문제3

온라인 쇼핑몰에서 상품을 관리하는 프로그램을 작성해야 합니다.
각 상품은 상품명, 가격, 재고 수량을 가지고 있습니다.
프로그램은 사용자로부터 상품 정보를 입력받아 상품을 생성하고, 생성된 상품 정보를 출력해야 합니다.
이를 위해 어떤 변수를 선언하고 어떤 데이터 유형을 사용해야 할까요?

  • 상품명은 문자열(String)로 선언되어야 합니다.
  • 가격은 실수(double)로 선언되어야 합니다.
  • 재고 수량은 정수(int)로 선언되어야 합니다.
-- 상품 정보 --
상품명: Laptop
가격: 1500.0
재고 수량: 10
  • 문제 풀어보기
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("상품명을 입력하세요 : ");
            String goodsName = scanner.nextLine();
    
            System.out.println("가격을 입력하세요 : ");
            double goodsPrice = scanner.nextDouble();
    
            System.out.println("재고 수량을 입력하세요 : ");
            int goodsNum = scanner.nextInt();
    
            System.out.println("상품정보입니다");
            System.out.println("상품명 : " + goodsName);
            System.out.println("상품가격 : " + goodsPrice);
            System.out.println("재고 수량 : " + goodsNum);
    
            scanner.close();
        }
    }
  • import java.util.Scanner;
    
    public class BankAccount {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("계좌 번호를 입력하세요: ");
            String accountNumber = scanner.nextLine();
    
            System.out.print("예금주 이름을 입력하세요: ");
            String accountHolderName = scanner.nextLine();
    
            System.out.print("초기 잔액을 입력하세요: ");
            double balance = scanner.nextDouble();
    
            System.out.println("-- 계좌 정보 --");
            System.out.println("계좌 번호: " + accountNumber);
            System.out.println("예금주 이름: " + accountHolderName);
            System.out.println("잔액: " + balance);
    
            scanner.close();
        }
    }
  • 질문/해설
    • scanner.close(); 를 안하면 어떻게 돼?

      프로그램이 더 이상 사용자의 입력을 받지 못하고,
      Scanner 객체와 연결된 System.in 스트림이 닫히지 않을 수 있습니다.
      이는 프로그램의 예상치 못한 동작이나 리소스 누수로 이어질 수 있습니다.

문제4

학생들의 성적을 관리하는 프로그램을 작성해야 합니다.
각 학생은 이름, 국어 점수, 영어 점수, 수학 점수를 가지고 있습니다.
프로그램은 사용자로부터 학생의 정보를 입력받아 학생을 생성하고, 생성된 학생 정보를 출력해야 합니다.
이를 위해 어떤 변수를 선언하고 어떤 데이터 유형을 사용해야 할까요?

  • 학생 이름은 문자열(String)로 선언되어야 합니다.
  • 국어, 영어, 수학 점수는 정수(int)로 선언되어야 합니다.
-- 학생 정보 --
이름: John Doe
국어 점수: 90
영어 점수: 85
수학 점수: 95
  • 문제 풀어보기
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
    
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("이름을 입력하세요 : ");
            String name = scanner.nextLine();
    
            System.out.println("국어 점수를 입력하세요 : ");
            int KoreaScore = scanner.nextInt();
    
            System.out.println("영어 점수를 입력하세요 : ");
            int englishScore = scanner.nextInt();
    
            System.out.println("수학 점수를 입력하세요 : ");
            int mathScore = scanner.nextInt();
    
            System.out.println("이름 : " + name);
            System.out.println("국어 점수 : " + KoreaScore);
            System.out.println("영어 점수 : " + englishScore);
            System.out.println("수학 점수 : " + mathScore);
    
            scanner.close();
        }
    }
    국어 점수를 입력하세요 : 
    90
    영어 점수를 입력하세요 : 
    85
    수학 점수를 입력하세요 : 
    95
    이름 : 김메튜
    국어 점수 : 90
    영어 점수 : 85
    수학 점수 : 95
  • import java.util.Scanner;
    
    public class StudentManagement {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("학생 이름을 입력하세요: ");
            String studentName = scanner.nextLine();
    
            System.out.print("국어 점수를 입력하세요: ");
            int koreanScore = scanner.nextInt();
    
            System.out.print("영어 점수를 입력하세요: ");
            int englishScore = scanner.nextInt();
    
            System.out.print("수학 점수를 입력하세요: ");
            int mathScore = scanner.nextInt();
    
            System.out.println("-- 학생 정보 --");
            System.out.println("이름: " + studentName);
            System.out.println("국어 점수: " + koreanScore);
            System.out.println("영어 점수: " + englishScore);
            System.out.println("수학 점수: " + mathScore);
    
            scanner.close();
        }
    }
  • 문제4에서 드디어 안보고 쳤다!

문제5 심화

학생들의 성적을 관리하는 프로그램을 작성해야 합니다.
프로그램은 사용자로부터 학생의 수를 입력받고, 그에 따라 학생들의 이름과 과목 점수를 입력받아 각 학생의 정보를 관리해야 합니다.
각 학생은 이름과 국어, 영어, 수학 점수를 가지고 있습니다.

  • 학생 수를 입력받을 때, 양수인지 확인하여 유효한 입력인지 확인해야 합니다.
  • 학생의 이름은 문자열(String)로 선언되어야 합니다.
  • 국어, 영어, 수학 점수는 정수(int)로 선언되어야 합니다.
  • 입력받은 학생 정보는 배열 또는 컬렉션 자료구조를 사용하여 저장해야 합니다.
  • 입력받은 학생 정보를 출력할 때, 각 학생의 이름과 과목 점수를 함께 출력해야 합니다.
-- 학생 정보 입력 --
학생 수를 입력하세요: 3

학생 1 정보 입력:
이름: John Doe
국어 점수: 90
영어 점수: 85
수학 점수: 95

학생 2 정보 입력:
이름: Alice Smith
국어 점수: 88
영어 점수: 92
수학 점수: 76

학생 3 정보 입력:
이름: Bob Johnson
국어 점수: 75
영어 점수: 82
수학 점수: 78

-- 학생 정보 출력 --
학생 1:
이름: John Doe
국어 점수: 90
영어 점수: 85
수학 점수: 95

학생 2:
이름: Alice Smith
국어 점수: 88
영어 점수: 92
수학 점수: 76

학생 3:
이름: Bob Johnson
국어 점수: 75
영어 점수: 82
수학 점수: 78
  • 문제 풀어보기
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("학생 수를 입력하세요 : ");
            int stuCount = scanner.nextInt();
    
            String[] stuName = new String [stuCount];
            int[] koreaSc = new int [stuCount];
            int[] englishSc = new int[stuCount];
            int[] mathSc = new int[stuCount];
    
            for (int i = 0; i < stuCount; i++) {
                System.out.println("학생" + (i+1) + "정보입력");
                // i+1 : 괄호를 빼면 오류가 남
                // -> 학생 넘버 1, 11, 21
                // (i++) : +1이 아닌 ++로 적어주면 오류가 남
                // -> 학생 넘버가 0부터 시작되는 오류
                // -> 학생 수를 5로 지정 했을 때 학생 넘버 0, 2, 4
                scanner.nextLine();
    
                System.out.println("학생 이름 : ");
                stuName[i] = scanner.nextLine();
    
                System.out.println("국어 점수 : ");
                koreaSc[i] = scanner.nextInt();
    
                System.out.println("영어 점수 : ");
                englishSc[i] = scanner.nextInt();
    
                System.out.println("수학 점수 : ");
                mathSc[i] = scanner.nextInt();
                // 점수 부분에서 Int가 아닌 Line으로 하면 오류가 남
            }
    
            System.out.println("입력한 학생들의 정보입니다");
            for (int i = 0; i < stuCount; i++) {
                System.out.println("학생 " + (i+1) + ": ");
                System.out.println("이름: " + stuName[i]);
                System.out.println("국어 점수: " + koreaSc[i]);
                System.out.println("영어 점수: " + englishSc[i]);
                System.out.println("수학 점수: " + mathSc[i]);
            }
            scanner.close();
        }
    }
    학생 수를 입력하세요 : 
    3
    학생1정보입력
    학생 이름 : 
    김메튜
    국어 점수 : 
    65
    영어 점수 : 
    88
    수학 점수 : 
    90
    학생2정보입력
    학생 이름 : 
    김글로리아
    국어 점수 : 
    43
    영어 점수 : 
    76
    수학 점수 : 
    27
    학생3정보입력
    학생 이름 : 
    김밥앤떡볶이
    국어 점수 : 
    65
    영어 점수 : 
    95
    수학 점수 : 
    47
    입력한 학생들의 정보입니다
    학생 1: 
    이름: 김메튜
    국어 점수: 65
    영어 점수: 88
    수학 점수: 90
    학생 2: 
    이름: 김글로리아
    국어 점수: 43
    영어 점수: 76
    수학 점수: 27
    학생 3: 
    이름: 김밥앤떡볶이
    국어 점수: 65
    영어 점수: 95
    수학 점수: 47
  • import java.util.Scanner;
    
    public class StudentManagement {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("학생 수를 입력하세요: ");
            int studentCount = scanner.nextInt();
    
            // 입력된 학생 수에 따라 배열 생성
            String[] studentNames = new String[studentCount];
            int[] koreanScores = new int[studentCount];
            int[] englishScores = new int[studentCount];
            int[] mathScores = new int[studentCount];
    
            // 학생 정보 입력
            for (int i = 0; i < studentCount; i++) {
                System.out.println("\n학생 " + (i + 1) + " 정보 입력:");
                scanner.nextLine(); // 버퍼 비우기
    
                System.out.print("이름: ");
                studentNames[i] = scanner.nextLine();
    
                System.out.print("국어 점수: ");
                koreanScores[i] = scanner.nextInt();
    
                System.out.print("영어 점수: ");
                englishScores[i] = scanner.nextInt();
    
                System.out.print("수학 점수: ");
                mathScores[i] = scanner.nextInt();
            }
    
            // 학생 정보 출력
            System.out.println("\n-- 학생 정보 출력 --");
            for (int i = 0; i < studentCount; i++) {
                System.out.println("학생 " + (i + 1) + ":");
                System.out.println("이름: " + studentNames[i]);
                System.out.println("국어 점수: " + koreanScores[i]);
                System.out.println("영어 점수: " + englishScores[i]);
                System.out.println("수학 점수: " + mathScores[i]);
                System.out.println();
            }
    
            scanner.close();
        }
    }
  • 질문/해설
    • String[] studentNames, int[] koreanScores 이런 것들을 [] 을 이용하여 배열을 선언해주고 studentCount 여기에 다 넣어 준거야?
      , 맞습니다.
      
      String[] studentNames과 int[] koreanScores는 []를 사용하여 배열을 선언한 것입니다.
      
      배열을 선언할 때 []를 사용하면 해당 변수는 배열을 참조할 수 있는 참조형 변수가 됩니다.
      String[]String 타입의 배열을 참조할 수 있는 변수를 선언하고, int[]int 타입의 배열을 참조할 수 있는 변수를 선언합니다.
    • String[] studentNames = new String[studentCount];
      new 옆에 변수 이름이 아닌 타입을 넣는 이유가 뭐야?
      ```java
      new 키워드를 사용하여 배열을 생성할 때,
      배열의 크기를 지정하는 부분에는 변수 이름이 아니라 크기를 나타내는 값을 넣어야 합니다.
      
      예를 들어, String[] studentNames = new String[studentCount];에서 new String[studentCount]는
      studentCount 변수의 값에 따라 학생 이름을 저장할 수 있는 크기의 배열을 생성하는 것을 의미합니다.
      ```
    • [i] 가 없으면 왜 주소값이 나와?
      배열 변수와 인덱스 [i]를 함께 사용하여 특정 요소에 접근하고 값을 저장하거나 읽어올 수 있습니다.
      
      만약 [i]가 없는 경우, 해당 변수는 배열이 아닌 단일 값을 저장하는 변수로 간주됩니다.
      
      배열 요소에 접근하거나 여러 개의 값을 저장하기 위해서는 반드시 [i]와 같이 인덱스를 사용해야 합니다.
    • 인덱스?
      인덱스는 배열 내에서 각 요소의 위치를 나타내는 값입니다.
      배열은 여러 개의 값을 순서대로 저장하는 자료구조이며,
      각 값은 배열 내에서 고유한 위치를 가지고 있습니다.
      이 위치를 인덱스라고 합니다.
      
      일반적으로 배열의 인덱스는 0부터 시작하여 순차적으로 증가합니다.
      
      int[] numbers = {10, 20, 30, 40, 50};라는 배열이 있다고 가정해봅시다.
      이 배열에서 숫자 10은 인덱스 0에 위치하고, 숫자 20은 인덱스 1에 위치합니다.
      숫자 30은 인덱스 2, 숫자 40은 인덱스 3,그리고 숫자 50은 인덱스 4에 위치하게 됩니다.
      
      인덱스는 배열 요소에 접근할 때 사용됩니다.
      numbers[2]는 인덱스 2에 해당하는 배열 요소를 참조하는 것이며, 이 경우 30이 됩니다.
      배열의 특정 위치에 접근하거나 값을 변경하려면 해당 요소의 인덱스를 알아야 합니다.
profile
공부하자개발하자으쌰으쌰

0개의 댓글