Day_17 ( Java 기초 문법 실습 - 2)

HD.Y·2023년 11월 21일
0

한화시스템 BEYOND SW

목록 보기
15/58
post-thumbnail

오늘 배운 기초 문법

  • 배열 초기화 : int[] [배열 이름] = { 20, 34, 6, 1231 }
    ➡ 위의 예시와 같이 배열을 만들 때 값을 저장해서 만들 수 있다.
  • 배열의 크기 : [배열 이름].length

  • 입력받기 : Scanner [객체 이름] = new Scanner(System.in);
    1) 문자 입력 받기 : String [변수 이름] = [객체 이름].nextLine();
    2) 숫자 입력 받기 : int [변수 이름] = [객체 이름].nextInt();


기초 문법을 활용한 문제 풀이 💻

  • Q1) 1부터 100까지 총합을 구하시오
    public class Ex01 {
    public static void main(String[] args) {
    
        // 1. 총합을 저장하기 위한 변수를 만든다.
        // 2. i가 1부터 100까지 1씩 증가하면서 반복한다.
        // 3. 	총합에 i를 더해서 저장한다.
        
        int totalNum = 0;
        for(int i=1; i<=100; i++) {
            totalNum += i;
        }
        System.out.println("총합 : " + totalNum);
      }
    }

  • Q2) 1부터 100까지 중에서 홀수의 총합을 구하시오
    public class Ex02 {
    public static void main(String[] args) {
    
        // 1. 홀수의 총합을 저장하기 위한 변수를 만든다.
        // 2. i가 1부터 100까지 1씩 증가하면서 반복한다.
        // 3. 	만약에 i가 홀수라면
        // 4. 		총합에 i를 더하여 저장한다.
        
        int totalNum = 0;
        for(int i=1; i<=100; i++) {
            if(i % 2 != 0) {
                totalNum += i;
            }
        }
        System.out.println("홀수 총 합 : " + totalNum);
      }
    }

  • Q3) 양의 정수인 6개의 숫자를 입력받고, 입력받은 숫자를 거꾸로 출력하시오
    import java.util.Scanner;

    public class Ex03 {
    public static void main(String[] args) {
    
        // 1. 숫자를 입력받기 위한 스캐너를 만든다.
        // 2. 숫자를 입력받을 크기가 6인 배열을 만든다.
        // 3. i가 0부터 5까지 반복한다.
        // 4. 	배열의 반복 횟수 번째에 숫자를 입력받아서 배열에 저장한다.
        // 5. i가 5부터 0까지 반복한다.
        // 6. 	배열의 반복 횟수 번째에 해당하는 숫자를 출력한다.
        
        Scanner sc = new Scanner(System.in);

        int[] input = new int[6];
        for(int i=0; i<6; i++) {
            System.out.print("6개의 숫자를 입력하세요 : ");
            input[i] = sc.nextInt();
        }
        System.out.print("입력받은 숫자를 거꾸로 출력하면 : ");
        for(int i=5; i>=0; i--) {
            System.out.print(input[i] + " ");
        }
      }
    }

  • Q4) 양의 정수인 10개의 숫자를 입력받고, 입력받은 10개의 숫자의 평균을 구하시오
    import java.util.Scanner;

    public class Ex04 {
    public static void main(String[] args) {
    
        // 1. 숫자를 입력받기 위한 스캐너를 만든다.
        // 2. 숫자를 입력받을 크기가 10인 배열을 만든다.
        // 3. i가 0부터 9까지 반복한다.
        // 4. 	배열의 반복 횟수 번째에 숫자를 입력받아서 배열에 저장한다.
        // 5. 입력받은 숫자의 총합을 저장할 변수를 생성한다.
        // 6. i가 0부터 9까지 반복한다.
        // 7. 	총합을 저장할 변수에 배열의 모든 값을 더해서 저장한다.
        // 8. 총합을 배열의 크기만큼 나눈 숫자를 출력한다.
        
        Scanner sc = new Scanner(System.in);

        int[] input = new int[10];

        for(int i=0; i<10; i++) {
            System.out.print("10개의 숫자를 입력하세요 : ");
            input[i] = sc.nextInt();
        }
        int totalNum = 0;
        for(int i=0; i<10; i++) {
            totalNum += input[i];
        }
        System.out.println("평균값 : " + (totalNum / input.length));
      }
    }
  • Q5) 1에서 10까지 범위안의 정수 10개를 랜덤하게 생성하여 총합을 구하시오
    public class Ex05 {
    public static void main(String[] args) {
    
        // 1. 숫자를 저장할 크기가 10인 배열을 만든다.
        // 2. i가 0부터 9까지 반복한다.
        // 3. 	배열의 반복 횟수 번째에 1 ~ 10 사이에 있는 랜덤한 숫자를 생성하여 저장한다.
        // 4. 숫자의 총합을 저장할 변수를 생성한다.
        // 5. i가 0부터 9까지 반복한다.
        // 6. 	총합을 저장할 변수에 배열의 모든 값을 더해서 저장한다.
        // 7. 총합을 저장한 변수를 출력한다.
        
        int[] input = new int[10];

        for(int i=0; i<10; i++) {
            input[i] = (int)(Math.random()*10) + 1;
        }
        int totalNum = 0;
        for(int i=0; i<10; i++) {
            totalNum += input[i];
        }
        System.out.println("총합 : " + totalNum);
      }
    }

  • Q6) 월 ~ 일 까지 순서대로 저장된 배열이 있다. 숫자를 입력 받아 입력한 숫자와
          같은 인덱스가 배열에 있으면 요일을 출력하고, 없을 시 "잘못 입력하셨습디라"
          를 출력하시오
    import java.util.Scanner;

    public class Ex06 {
    public static void main(String[] args) {
    
        // 1. 숫자를 입력받기 위한 스캐너를 만든다.
        // 2. 월 ~ 일 까지 요일을 저장할 배열을 만들고 만든 배열에 저장한다.
        // 3. 숫자를 입력받을 변수를 생성한다.
        // 4. 숫자를 입력받아 생성한 변수에 저장한다.
        // 5. 만약에 입력받은 숫자가 0 이상이고 6 이하라면
        // 6. 	배열에 입력받은 숫자번째 값을 출련한다.
        // 7. 그렇지 않으면
        // 8. 	"잘못 입력하셨습니다" 를 출력한다.
    
        Scanner sc = new Scanner(System.in);

        String[] week = {"월","화","수","목","금","토","일"};
        System.out.print("1 ~ 6 사이 숫자를 입력하세요 : ");
        int num = sc.nextInt();

        if(num >= 0 && num <=6) {
            System.out.println(week[num]);
        } else {
            System.out.println("잘못 입력하셨습니다.");
        }
      }
    }

  • Q7) 정수로 된 돈을 입력받아 "50000원, 10000원, 1000원, 500원, 100원, 50원,
          10원, 1원" 이 각각 몇개씩 변환되는지 출력하시오
    import java.util.Scanner;

    public class Ex07 {
    public static void main(String[] args) {
        int[] unit = {50000, 10000, 5000, 1000, 500, 100, 50, 10, 1};

        // 1. 각 화폐의 개수를 저장할 count 배열을 생성한다.
        // 2. 돈을 입력받기 위한 스캐너를 만든다.
        // 3. 돈을 입력받을 변수를 생성한 후 입력받은 돈을 변수에 저장한다.
        // 4. i가 0부터 unit 배열의 크기만큼 반복한다.
        // 5. 	count 배열에 입력받은 돈을 각 화폐 단위로 나눴을때 몫을 저장한다.
        // 6. 	입력받은 돈은 이전 화폐 단위로 나눴을때의 나머지로 다시 저장한다.
        // 7. 각 화폐 단위별 개수를 출력한다.
        
        int[] count = new int[unit.length];

        Scanner sc = new Scanner(System.in);
        System.out.print("돈을 입력하세요 : ");
        int input = sc.nextInt();

        for(int i=0; i<unit.length; i++) {
            count[i] = input / unit[i];
            input %= unit[i];
        }
        System.out.println("50000원 권 : " + count[0] + "개");
        System.out.println("10000원 권 : " + count[1] + "개");
        System.out.println("5000원 권 : " + count[2] + "개");
        System.out.println("1000원 권 : " + count[3] + "개");
        System.out.println("500원 동전 : " + count[4] + "개");
        System.out.println("100원 동전 : " + count[5] + "개");
        System.out.println("50원 동전 : " + count[6] + "개");
        System.out.println("10원 동전 : " + count[7] + "개");
        System.out.println("1원 동전 : " + count[8] + "개");
      }
    }

  • Q8) 로또 번호 생성 (1 ~ 45 범위의 숫자 중 중복되지 않은 6개의 숫자를 출력하시오)
    public class Ex08 {
    public static void main(String[] args) {

        // 1. 6개의 로또 번호를 저장할 새로운 배열을 만든다.
        // 2. i가 0부터 6까지 반복한다. 
        // 3.	생성한 배열에 1 ~ 45 범위 중 랜덤하게 6개의 숫자를 생성하여 저장한다.
        // 4. i가 0부터 6까지 반복한다.
        // 5. j가 0부터 i보다 작은 수까지 반복한다.
        // 6. 	만약 i 인덱스 숫자와 j 인덱스 숫자가 같으면 다시 반복한다.
        // 7. 모든 조건을 만족하면 while 반복문을 빠져나온다.
        // 8. 저장된 6개의 숫자를 출력한다.
    
    
        int[] lotto = new int[6];

        boolean flag = true;

        while(flag) {
            flag = false;
            for(int i=0; i<6; i++) {
                lotto[i] = (int)(Math.random()*45) + 1;
            }
            for(int i=0; i<6; i++) {
                for(int j=0; j<i; j++) {
                    if(lotto[j] == lotto[i]) {
                        flag = true;
                    }
                }
            }
        }
        System.out.print("이번주 로또번호 : ");
        for(int i=0; i<6; i++) {
            System.out.print(lotto[i] + " ");
        }
      }
    }

오늘의 느낀점 👀

  • 오늘은 어제와 오늘 배운 기초 문법들을 활용하여 문제들을 여러개 풀어보았다. 어제는 문제 풀때 많이 헤맸었는데, 확실히 프로그래머스 문제도 풀어보고 하다 보니, 살짝 감이 왔는지 순조롭게 문제를 풀 수 있었다.✌

  • 위 문제중 못 푼 문제는 마지막 "로또 번호 생성 문제" 였다. 내가 헤맨부분은 중복된 값을 출력하지 않는 부분이었다.😵‍💫 내가 헤매고 있으니, 옆에 앉은 나의 짝이 내가
    풀 수 있도록 가이드를 제시해줬다.

  • 좋았던 점은, 바로 답을 알려주지 않고 계속해서 내가 풀어 나갈 수 있도록 질문을 던져주셨다. 그 결과 위의 코드를 짜게 되었는데, 핵심은❗ 반복문과 조건문을 사용함에 있어서 그 코드의 구동원리만 잘 알고 있다면, 무한 반복문을 생성하고 언제든지 자유롭게 내가 원할때 반복문으로부터 탈출 할 수 있어야 된다는 것이었다.

  • 그렇게 고민하다 보니, Boolean 타입에 대한 깨달음도 얻을 수 있었다. 문제를 풀면서 Boolean 타입을 사용할 곳이 없어서 단순히 개념 수준으로만 알고 있었는데, 이번 기회에 정확하게 알 수 있었다.

  • 물론 내가 작성한 답이 가장 좋은 코드라고 말할 수는 없겠으나, 오늘 학습한 내용만 활용하면 반복문을 내가 원하는대로 자유자재로 사용하는 것이 가능하므로 큰 문제는 없다고 생각한다.

  • 자바는 객체지향 언어라는 말처럼 학습함에 있어서 가장 중요한 것은 위의 예시문제들에 적어둔 문제 풀이 순번처럼 한글로 내가 원하는 내용을 먼저 정리하는 것 같다.

  • 잘 정리되고, 실행 순서가 완벽하게 이해된다면 그것을 프로그래밍 언어로 구현하는 것은 그리 어려운 일은 아닐것이라 생각한다.🧐

profile
Backend Developer

0개의 댓글