Archive

2020-12-10 TIL

|

2020-12-10 TIL


  • 오늘 한 것
    1. 아부지 명함 만들어드리기 - 오전 시간에 하려고 했던 리눅스 공부는 다음 날로 연장🤣
    2. 학원 비대면 수업 (홀짝 게임) - 어제 내가 만들어본 코드와 선생님이 만드신 코드를 비교해보았을때 역시 부족한 부분이 많음을 느꼈다. 예를 들어, 불필요한 if문의 연속을 어떻게 하면 줄일 수 있을지 조금 더 고민을 했었어야했다. 그리고 나는 do-while문으로 작성을 하였으나 그냥 while문으로 무한반복을 돌리면서 조건식에 boolean 값으로 on/off 스위치처럼 만드는 방법을 배웠다. 자바스크립트 튜토리얼에서 많이 보았던 방식인데 이렇게 쓰일 줄은 몰랐다.
    3. 블로그 포스팅 (java day7, day8 정리) - 물론 수업시간에 한 내용이긴 하지만 스스로 순서도를 구상해서 차례차례 코딩을 하면서 에러 수정하고 딱! 완성시켜서 잘 돌아갈때 엄청난 뿌듯함을 느꼈다. 아직 절차식 코딩의 단계이지만 얼른 더 공부해서 머릿속에 떠오른 아이디어를 구현 할 수 있는 능력을 기르고 싶다.
    4. Javascript30 Tutorial day 23 (추후 포스팅 예정)
    5. TIL스타일을 조금 수정하였다. 그날그날 배운것 중에 핵심적인 부분을 TIL에 적으려고 했지만 다른 카테고리와 내용적으로 겹치므로 중복을 제거하기 위해 TIL은 간략하게 적기로 했다.

  • 내일 할 것
    1. 이것이 리눅스다 Chapter 08 원격지 시스템 관리 끝내기
    2. Javascript30 Tutorial Day 24
    3. 학원 수업(15:30~22:00) 객체지향 이론
    4. 블로그 포스팅 (Java Day 9, Javascript Day 1)
    5. 유일하게 보는 TV프로그램 쇼미더머니9 본방 사수🍺

  • 끝으로

오타로인한 에러는 기술적인 에러보다 더욱 빡침..

오늘의 한 줄 총평 : 코딩이란 “ 오타찾기 “


2020-12-09 TIL

|

2020-12-09 랭킹 매기기 원리


  • 오늘 한 것
    1. Linux/CentOS 셸 스크립트
    2. 학원 비대면 수업 (다차원 배열 응용문제 풀이)
    3. 블로그 포스팅 (java day5, day6 정리)
    4. Javascript30 Tutorial day 22 (추후 포스팅 예정)
    5. 제어문 연습 - 홀짝게임 구현

  • 오늘 배운 것

    1. 랭킹 매기기 원리

      • 배열에 정수값이 3개 들어있다. 이 배열에 있는 값들을 비교하여 랭킹을 매겨야한다.

        어떻게 할까?

        정답은 동일한 배열이 하나 더 있다고 가정하는 것이다.

        그렇다고 배열을 하나 더 만드는 것은 아니고 이중 for문을 활용한다.

        처음에 랭크는 모두 1에서 시작한다.

        A{ a, b, c} 이렇게 있다고 치면 A의 값들을 A’의 값들과 차례차례 비교한다.

        A’{a, b, c} 여기서 중요한 것은 자신을 제외한 값과 비교할 것

        만약 a가 b보다 작으면 a의 랭크는 1이 올라간다.

        (반복)

        연산이 끝난 후에는 1등, 2등, 3등의 랭킹이 매겨져있다.

        코드로 풀어보자

        int[] score = {23, 65, 89}; //비교하고자 하는 배열
        int[] rank = new int[3]; //랭크를 저장할 배열
        
        for(int i=0; i<score.length; i++){
            rank[i]++;			//int 배열의 초기값은 0이므로 1씩 추가
            for(int j=0; j<score.length; j++){
                if(score[i] < score[j]) rank[i]++;	//작으면 랭크 1 추가
            }					//자신을 제외해야하므로 같으면 안됨
            System.out.println(score[i]+", "+rank[i]);
        }
        
        /*  출력값
        	23, 3
        	65, 2
        	89, 1
        */
        

  • 내일 할 것
    1. 이것이 리눅스다 Chapter 08 원격지 시스템 관리 끝내기
    2. Javascript30 Tutorial Day 23
    3. 블로그 포스팅 (Java Day 7, 8)
    4. 배열 응용문제 숙제 조금?🤦‍♂️

  • 끝으로

코딩을 잘하려면 수학적으로 머리가 잘 돌아가야하나보다…어렵🙄

오늘의 한 줄 총평 : 수학시간


  • 참고 자료

null

Java Day 8 제어문 응용문제(홀짝게임)

|

Java Day 8 제어문 응용문제(홀짝게임)


  1. 홀짝 게임

    • 제어문을 응용하여 홀짝게임을 구현해보자

    • 제시된 조건

      • 초기 게임머니 1,000원
      • 메뉴선택 1. 홀수 2. 짝수 0. 게임종료
      • 배팅금액 입력 받고 엔터키를 눌러서 홀짝게임 실행
      • 승리하면 배팅금액만큼 받고 지면 반대
      • 게임머니가 5,000원 이상 or 0원이 되면 강제종료
      • 종료 선택시 정말로 종료할건지 다시 묻기
    • 출력화면

      홀짝게임 메뉴선택 1.홀수 2.짝수 0.게임종료 (0번 선택시) 정말로 종료하시겠습니까? (y / n) (엉뚱한 메뉴 선택시) 경고 메세지 출력 (1,2번 선택시) 배팅 금액 : (입력) 승리 or 패배 메세지 출력 (반복)

  2. 순서도

    1. 멤버변수 선언 : 게임머니, 메뉴, 스위치
    2. while문 조건식에 boolean 스위치 넣고 true일동안 무한반복
    3. 메뉴 구현
    4. 0번 입력시 한번 더 묻고 while문 나가기
    5. 1,2번 이외의 번호 입력시 메뉴 재선택
    6. 1,2번 선택시 배팅금액 입력 화면으로 전환
    7. 주사위 난수 생성해서 비교
    8. 승패 확인 후 게임머니 정산
    9. 종료 조건 구현
  3. 코딩

import java.io.*;

public class OddOrEven {
    public static void main(String[] ar)throws IOException{
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        	int myMoney = 1000;
        	int betMoney;
        	int menu = -1;
        	boolean isStop = false;

        	//while loop
        	while(!isStop){
                System.out.println("홀짝 게임 START");
                System.out.println("잔액 : "+myMoney+"원");
                System.out.println("메뉴를 선택하세요");
                System.out.println("1. 홀수");
                System.out.println("2. 짝수");
                System.out.println("0. 게임종료");
                System.out.print("메뉴 : ");
                menu = System.in.read() - 48;
                System.in.read(); System.in.read();
           		//메뉴 범위 설정
                while(menu != 1 && menu != 2 && menu != 0){
                    System.out.println("잘못 누르셨습니다.");
                    System.out.print("메뉴 : ");
                    menu = System.in.read() - 48;
                    System.in.read(); System.in.read();
                }//end if
                //종료 재확인
                if(menu == 0){
                    System.out.println("정말로 종료하시겠습니까? (y/n)");
                    menu = System.in.read();
                    System.in.read(); System.in.read();
                    if(menu == 'y' || menu == 'Y') {
                        isStop = true;
                    } else {
                        System.out.println("종료 취소");
                    }
                    continue;
                }//end if
                //배팅금액 입력
                System.out.print("배팅 금액 : ");
                betMoney = Integer.parseInt(br.readLine());
                System.out.println("주사위를 던지시려면 Enter를 입력하세요");
                System.in.read(); System.in.read();
                //난수 생성
                int dice = (int)(Math.random()*6)+1;
                //홀짝 확인
                System.out.println("주사위의 숫자는 : "+dice);
                if((menu+dice) % 2 == 0){
                    System.out.println("You Win!!");
                    myMoney += betMoney;
                    if(myMoney >= 5000){
                        System.out.println("당신은 타짜입니다.");
                        break;
                    }//end if
                } else {
                    System.out.println("You Lose..");
                    myMoney -= betMoney;
                    if(myMoney <= 0){
                        System.out.println("잔액 부족");
                        break;
                    }//end if
                }//end dice if
            }//end while loop
    }//end main
}

참고 자료


KG아이티뱅크 자바 수업 내용

Java Day 7 배열 가변길이 응용문제(성적표)

|

Java Day 7 배열 가변길이 응용 성적표관리 구현


  1. 성적표 관리 프로그램

    • 다차원배열의 가변길이를 응용하여 성적표 관리 프로그램을 구현해보자

    • 제시된 조건 : 인원수와 과목수에 자유도 부여, 평균으로 순위 표시, 평균은 소수점 둘째자리 반올림(메서드 이용 x)
    • 출력화면

    ————————————성적표————————————-

    이름 국어 영어 수학 총점 평균 등급 등수

    홍길동 90 90 90 270 90 A 1

    ——————————–성적표——————————-

    이름 사회 과학 총점 평균 등급 등수

    사오정 80 80 160 80 B 2

  2. 순서도

    1. 멤버변수 선언

      • 인원수는 main 클래스의 String 배열에 저장

                           - 입력을 받을 과목과 점수는 다차원배열로 생성
                           - 이름,총점,평균,등급,등수 배열의 길이는 인원수만큼 생성
                           - 총점은 점수 배열의 마지막 인덱스에 저장
        
    2. 인원수만큼 for문 돌려서 이름,과목수,과목,점수 입력받아 배열에 저장(배열의 길이 중요)
    3. 평균 구해서 반올림 구현
    4. switch문으로 평균별 등급 매기기
    5. 등수 매기기 구현
    6. 출력
  3. 코딩

import java.io.*;

public class GradeCard {
    public static void main(String[] ar)throws IOException{
        BufferedReader br = 
            new BufferedReader(new InputStreamReader(System.in));
        
        int student = Integer.parseInt(ar[0]); //인원수
        String[] name = new String[student];  //이름
        String[][] subject = new String[student][];  //과목
        int[][] score = new int[student][]; //과목별 점수
        float[] avg = new float[student];  //평균
        String[] grade = new String[student];  //등급
        int[] rank = new int[student];  //등수
        
        for(int i=0; i<student; i++){
        	//이름 입력받기
        	System.out.println("이름 입력 : ");
            name[i] = br.readLine();
            //과목수 입력받기
            System.out.println("응시한 과목 개수 입력 : ");
            int num = Integer.parseInt(br.readLine());
            subject[i] = new String[num];
           	//과목수 = subject[i].length
            score[i] = new int[subject[i].length+1];
            for(int j=0; j<subject[i].length; j++){
                //과목 입력받기
                System.out.println("응시한 과목명 입력 : ");
                subject[i][j] = br.readLine();
                //점수 입력받기
                System.out.println("점수 입력 : ");
                score[i][j] = Integer.parseInt(br.readLine());
            	//총점 구하기
                score[i][score[i].length-1] += score[i][j];
            }//end for subject&score
            //평균 구하기
            avg[i] = (float)(score[i][score[i].length-1] / subject[i].length);
            //소수점 둘째자리에서 반올림하기
            avg[i] = (int)((avg[i]+0.005)*100) / 100.f;
            //등급 매기기
            switch((int)avg[i] / 10){
                case 10 :
                case 9  : grade[i] = "A"; break;
                case 8  : grade[i] = "B"; break;
                case 7  : grade[i] = "C"; break;
                case 6  : grade[i] = "D"; break;
                default : grade[i] = "F"; break;
            }//end for switch     
        }//end for student
        //등수 매기기
            for(int i=0; i<student; i++){
                rank[i]++;
                for(int j=0; j<student; j++){
                    if(avg[i] < avg[j]) rank[i]++;
                }
            }//end for rank
        System.out.println();
        //출력
        for(int i=0; i<student; i++){
			System.out.print("*************");
			for(int j=0; j<subject[i].length; j++)
				System.out.print("****");
			System.out.print(" 성 적 표 ");
			for(int j=0; j<subject[i].length; j++)
				System.out.print("****");
			System.out.println("*************");   
            System.out.print("이름\t");
            for(int j=0; j<subject[i].length; j++){
                System.out.print(subject[i][j]+"\t");
            }
            System.out.println("총점\t평균\t등급\t등수\t");
            System.out.print(name[i]+"\t");
            for(int j=0; j<score[i].length; j++){
                System.out.print(score[i][j]+"\t");
            }
            System.out.println(avg[i]+"\t"+grade[i]+"\t"+rank[i]);
        }//end for print
    }//end for main
}

참고 자료


KG아이티뱅크 자바 수업 내용

Java Day 6 배열

|

Java Day 6 배열


  1. 배열

    • 같은 자료형들끼리 모아두는 하나의 묶음

    • 참조자료형 - 메모리의 번지를 값으로 갖는다, 번지를 통해 객체를 참조

    • 한 번 생성된 후 크기를 변경 할 수 없다

    • NullPointerException

      변수를 선언하고 new 연산자로 초기화하지 않은 상태에서 인덱스로 값을 집어넣을 경우

      배열은 초기 주소값으로 null 을 가지고 있어서 참조를 한 뒤에 사용해야한다.

    • 선언과 초기화

    int[] arr; // 배열의 선언
    arr = new int[3]; // new 연산자로 초기화
    arr = new int[3]{1,2,3}; // 초기화와 동시에 할당
    
    arr = {1,2,3}; // compile error --->  int[] arr = {1,2,3};과 같이 써야함
    
  2. 1차원 배열

    • 배열은 1차원의 연속이다
  3. 다차원 배열

    • 다차원 배열의 선언
    int[][] arr;  // [raw][column]
    int arr[][];
    int[] arr[];
    
    • 다차원 배열의 초기화
    int[][] arr;
    arr = new int[2][2];
    
  • 다차원 배열의 길이
   int[][] arr = new int[2][3];
   System.out.print(arr.length); //output : 2 출력

배열 arr은 힙 메모리 영역에 2개의 row를 참조하고 있고, 각각의 row는 column을 참조하고 있으므로 arr의 길이는 2가 된다.

  1. 가변길이

    • 다차원 배열에서 row의 각각의 column 길이는 일정하지 않을 수 있다
    int[][] arr = new int[3][]; //row만 참조
    arr[0] = new int[2]; //각각의 column 참조
    arr[1] = new int[3];
    arr[2] = new int[1];
    //1행은 2열. 2행은 3열, 3행은 1열
    
  2. 배열 복사

    • 배열은 크기를 변경 할 수 없으므로 크기를 바꿀려면 원하는 크기의 배열을 생성한 후 기존의 것을 복사해와야한다

    • System.arraycopy(복사할 배열, 시작위치(복사할배열), 복사해서 저장할 배열, 시작위치(저장할 배열), 개수)

    String[] arr = {"하","이","루"};
    String[] arr2 = new String[4];
    arr2[3] = "!";
    System.arraycopy(arr, 0, arr2, 1, 3);
    // arr2 출력 : 하이루!
    

참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료