9월19일

Yullgiii·2023년 9월 19일
0
post-thumbnail

ADsP

오늘도 모의고사 풀어 보자구!!!!!!!!!!!!!1

내일 배움 캠프

스파르타 코딩 클럽에서 제공되는 코딩테스트 무료 강의가 있기에 시청해볼것이다.
슬랙으로 하루에 두문제씩 코드 문제를 푸는것이 있어 들고왔다.!!!

1번 문제 : 몫 구하기

문제 설명 정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.

public class Solution {
    public int solution(int num1, int num2) { 
    //: solution 메서드를 정의하고 이 메서드는 int형 값을 반환하며, num1과 num2라는 두 개의 매개변수를 받는다.
        int quotient = num1 / num2; 
        //: num1을 num2로 나눈 몫을 계산하여 quotient 변수에 저장한다
        return quotient;
        //quotient 변수에 저장된 몫을 반환하면 이것이 이 메서드의 결과값이다
    }
 }

2번 문제 : 최빈값 구하기

문제 설명 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

public class Solution {
    public int solution(int[] array) {
        int[] count = new int[1000];
        //: 주어진 숫자 범위에 해당하는 빈도수 배열 count를 생성 
        //count 배열의 인덱스는 가능한 숫자 값을 나타내며, 해당 인덱스의 값은 해당 숫자의 빈도수를 나타냄

        for (int num : array) {
            count[num]++;
            //: 주어진 배열 array를 순회하면서 각 숫자의 빈도수를 count 배열에 저장.
            //각 숫자가 나타날 때마다 해당 숫자의 인덱스 위치의 값을 증가.
        }

        int maxFrequency = 0;
        int mode = -1;
        int modeCount = 0; 
        //: 최빈값을 저장할 변수 mode와 그 빈도수를 저장할 maxFrequency 변수를 초기화.
        //또한, 최빈값과 동일한 빈도수를 가진 숫자의 개수를 저장하는 modeCount 변수를 초기화
       
        for (int i = 0; i < count.length; i++) {
        //count 배열을 순회하면서 최빈값을 찾는다. 최빈값은 가장 높은 빈도수를 가지는 숫자
            if (count[i] > maxFrequency) {
                maxFrequency = count[i];
                mode = i;
                modeCount = 1; 
                //현재 숫자의 빈도수가 최빈값보다 크면, 
                //최빈값과 빈도수를 업데이트하고 modeCount를 1로 초기화
            } else if (count[i] == maxFrequency) {
                modeCount++; 
                //현재 숫자의 빈도수가 최빈값과 같으면, modeCount를 증가.
                //이는 동일한 빈도수를 가진 다른 숫자가 존재함을 의미.
            }
        }

        if (modeCount > 1) { // 최빈값이 여러 개인 경우
            return -1;
            //만약 최빈값과 동일한 빈도수를 가진 다른 숫자가 존재한다면, 
            //최빈값이 여러 개인 경우이므로 -1을 반환.
        }

        return mode;
        //최빈값을 반환. 최빈값이 하나만 존재하고, 다른 숫자들보다 자주 나오는 경우에 해당.
    }
}

회고

아직 부족하다 다른분들의 정답을 보니 한참 부족함을 느낀다!

코딩 테스트

강의를 무료로 볼수있기에 지금은 당장은 언어를 익히는게 먼저이지만 미리 들어 봤다!!!

HTML,CSS

어제에 이어 마져 학습을 해볼것이다 목표는 익숙해지기!!!!!!!!!1
라고 하고는 나의 멍청함을 깨우치고 이리로 넘어왔다.

CSS


스타일 적용의 우선 순위
<인라인 스타일> -> 내.외부 스타일 시트 -> 웹 브라우저 기본 시트

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <style type="text/css">
        button {
            background-color: blue;

            color: white;

            height: 50px;

            width: 200px;

            border: none;

            border-color: red;

            border-style: solid;

            border-radius: 2px;

            cursor: pointer;

            border-width: 5px;
        }
    </style>
</head>
<body>
    <button>
        버튼
    </button>
</body>
</html>

색 표현 방법

1.색 이름(black..)
2.RGB 값 (rgb(0,0,0);)
3.Hex 값 (#0096FF)
4.RGBA 값 (rgb(0,150,255,0.5); 가장 마지막 수는 투명도)
5.HSL(hue,saturation,lightness)
색 채도 명도

수치값 표현 방법

  1. 픽셸(고정된 절대값)
  2. 퍼센트
  3. em,rem(환경에 따라 변하는 단위:가변단위)

Button 만들어보기!!!

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
    <link rel="stylesheet" href="styles.css" >
  //위 부분이 있어야지 css파일을 불러온다고 할수있다
</head>
<body>
    <button class="a-button">
        ButtonA
    </button>

    <button class="b-button">
        ButtonB
    </button>

    <button class="c-button">
        ButtonC
    </button>
</body>
</html>
.a-button {
    background-color: rgb(20, 40, 192);
    color: white;
    border: none;
    border-radius: 30px;
    cursor: pointer;
    margin-right: 10px;
    margin-left: 30px;
    padding-top: 20px;
    padding-bottom: 20px;
    padding-left: 16px;
    padding-right: 16px;
    transition: all 3s ease-in;
}
 //마우스를 버튼으로 가져갈때 스타일
.a-button:hover {
    opacity: 0.7; //투명도
    background-color: black;
}
//마우스로 클릭했을떄
.a-button:active {
    opacity: 0.3;
}

.b-button {
    background-color: white;
    border-color: rgb(212, 6, 64);
    border-style: solid;
    border-width: 1px;
    color: rgb(6,95,212);
    border-radius: 2px;
    cursor: pointer;
    padding-top: 9px;
    padding-bottom: 9px;
    padding-left: 16px;
    padding-right: 16px;
    transition: background-color 3s, color 0.15s;
}

.b-button:hover {
    background-color: rgb(6,95,212);
    color: white;
}

.b-button:active {
    opacity: 0.7;
}

.c-button {
    background-color: rgb(25,69, 98);
    color: white;
    border: none;
    height: 36px;
    width: 74px;
    border-radius: 8px;
    font-weight: bold;
    font-size: 15px;
    cursor: pointer;
    margin-left: 8px;
    transition: all 1s ease-out;
}

.c-button:hover {
    box-shadow: 5px 5px 10px rgba(0,0,0, 0.5);
}

이렇게 만들면!!!

위의 사진처럼 된다!!!

Float CSS & Clear CSS

Float Css

Clear CSS

회고

저번에 한번 강의를 들었을때는 뭔가 따라하면 된다 이런 느낌이였는데 다른분의 강의를 다시 들어보니 따라하면서 내가 이해하고 익숙해짐이 중요함을 느꼇다.

Java

얄코님의 강의를 들을것이다 우선적으로 이것을 할것이지만 머리가 아파지면 HTML,CSS로 도망 갈것이다.

섹션 6 클래스 더 알아보기

블록과 스코프

public class ex01 {
    public static void main(String[] args) {
        //  💡 { } 로 블록 생성
        {
            int x = 1;
            System.out.println(x);
        }
        {
            int intNum = 123;
            String str = "블록 밖은 위험해";
        }

        //  💡 블록 안에서 선언된 것은 밖에서 사용 불가
//        intNum = 234;
//        System.out.println(str);
        String x = "전국구 보스";

        {
            String y = "동네 양아치";

            //  💡 블록 안쪽에서는 바깥의 것 사용 가능
            System.out.println(x);
            System.out.println(y);
        }

        System.out.println(x);
       // System.out.println(y); // ⚠️ 불가
        int z = 1;

        for (int i = 0; i < 5; i++) {
            System.out.println(z + i);
        }

        //System.out.println(i); // ⚠️ 불가
    }
}

블록은 경찰 조사실 유리 같은 느낌이다!!!!!
밖에선 안이 안보이고 안써지지만 안에선 가능!!!!

블록 block

  • 0개 이상의 문 statement 들을 묶은 단위
  • 제어문, 함수, 클래스 등에 사용
  • 새로운 스코프 생성

패키지

  • 자바 프로젝트의 디렉토리(폴더) - 패키지로 불리게 됨
    • 일정 규모 이상의 프로그램을 적절히 모듈화
    • 패키지 정보: 클래스의 구성요소 중 하나
  • 클래스명의 중복을 피하기 위해 사용
    • 예: Button 클래스 - JRE의 동명 클래스 등 확인
  • 빌드의 결과도 패키지의 구조를 따름
    - 이전 예제들의 out 폴더 확인할 것

    앞서 배운 public, private, protected, defult 의 중요성~!
package Sec06.chap02.pkg04;

import Sec06.chap02.pkg01.Parent;
import Sec06.chap02.pkg03.*; // ⭐️ 와일드카드

public class Main {
    public static void main(String[] args) {
        Parent parent = new Parent();

        //  ⭐️ 패키지가 다른 동명의 클래스들을 불러올 경우
        Sec06.chap02.pkg01.Child child1 = new Sec06.chap02.pkg01.Child();
        Sec06.chap02.pkg02.Child child2 = new Sec06.chap02.pkg02.Child();

        Cls1 cls1 = new Cls1();
        Cls2 cls2 = new Cls2();
        Cls3 cls3 = new Cls3();
    }
}

다른 패키지들을 인포트 해줌 단축키 활용도 중요!('⌥' + '↩︎')

src 폴더에서 명령 입력해 볼 것

  • 최상위 패키지가 포함된 폴더일 것
  • 다른 위치 (바깥쪽이든 안쪽이든) 에서는 디렉토리 맞춰도 오류 발생
javac sec06/chap02/pkg4/Main.java
  • .class 파일들 생성 결과 확인

.class 파일들 지운 뒤, 같은 폴더에서 아래의 명령 입력해 볼 것

javac -d sec06/chap02/compileds sec06/chap02/pkg4/Main.java
  • 원하는 위치에 프로젝트 구조에 따른 .class 파일들 생성할 수 있음 확인

⭐️ 리펙토링

  • IntelliJ에서 클래스들을 다른 패키지로 옮겨 볼 것
  • 파일의 위치 변경이 패키지 정보에도 반영되어야 함

프로젝트 패키지명 작명

  • 인텔리제이에서 새 프로젝트 - Maven 또는 Gradle - 고급 옵션에서 예시
  • 본인/또는 회사의 도메인 (있을 경우) 권장
    • kr.yalco.calculator
      • 한국에 있는 얄코란 사람/회사가 만든 계산기 프로그램
      • 규모, 주체, 용도 등을 파악 가능
      • 다른 프로젝트들에 사용될 시…
  • java, javax 가 맨 앞에 올 수 없음 (JRE 라이브러리와 중복)
    • src 폴더 안에 만들고 클래스 넣어 확인해 볼 것
  • 식별자 명명 규칙 따름
    • 소문자로 시작하는 것이 컨벤션

⭐️ java.lang 패키지

  • 자바 라이브러리에 기본으로 포함
    • 프로그래밍에 널리 사용되는 핵심적인 클래스들
  • 임포트하지 않아도 되는 패키지
    • System, String 등을 임포트하지 않아도 되는 이유
    • 다른 라이브러리 패키지들은 임포트해야 함
				//  java.lang 패키지에 속한 기본 라이브러리 클래스들
        System.out.println("이 클래스들은 왜 임포트를 안 해도 될까요?");
        Object object = new Object();
        String str = new String("java.lang 패키지 소속이라 그럼");
        Integer integer;
        Math math;

        //  다른 패키지에 속한 기본 라이브러리 클래스들
        ArrayList arrayList;
        Calendar calendar;
        Optional optional;
        Iterator iterator;
        InputStream inputStream;
        Serializable serializable;
        Stream stream;
        Button button;

의 위 코드는

이 처럼 바꾸어 주어야만 사용이 가능해진다!!!!!!!!!11

여기서의 의문점

나는 왜 멍청한가...계속 사용되는 자료형 연산자 제어문 메소드가 아직 헷갈리고 어렵다
그렇다면 복습이다!!!!!!!!!!!
다시금 강의를 재수강할것이다

Java 복습!!!

자료형과 관련 연산자

자료형크기표현 범위
byte1바이트 (8비트)-128 ~ 127 (-2^7 ~ -2^7-1)
short2바이트-32,768 ~ 32,767
int4바이트-2,147,483,648 ~ 2,147,483,647
long8바이트-9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807
				//  ⚠️ 자료형의 범주 외의 수를 담을 수 없음
        byte overByte1 = 127;
        byte overByte2 = 128;
        byte overByte3 = -128;
        byte overByte4 = -129
		byte byteNum;
        int smallIntNum = 123;

				//  명시적(강제) 형변환
				//  - 개발자 : "내가 책임질테니까 그냥 넣으세요."
        byteNum = (byte) smallIntNum;
		int intNum = 12345;
        
        //  ⚠️ 강제로 범주 외의 값을 넣을 경우 값 손실
        byteNum = (byte) intNum; // 💡 12345 % 128

이항 연산자

  • 좌우의 두 값을 계산한 뒤 결과를 반환 return
  • 부수효과를 일으키지 않음
+더하기
-빼기
*곱하기
/나누기
%나머지
		int a = 1 + 2;
        int b = a - 1;
        int c = b * a;
        int d = a + b * c / 3;
        int e = (a + b) * c / 3;
        int f = e % 4;

💡 A가 B를 반환 (return) : 코드상 A를 B로 ‘바꿔 쓸 수 있다’는 의미

  • 1 + 23반환 : 1 + 23으로 대체해 넣었을 때와 결과가 같음

  • 숫자 데이터(리터럴)과 변수 혼합 사용 가능

  • 다중으로 사용 가능, 단 연산자별 우선순위 있음

    • 괄호로 해결 가능
  • 부수효과 없음 확인

  • 메모리를 크게 절약해야 하는 상황이 아닌 이상 int 널리 사용

    • 1cm 단위로 끊어지는 화장지가 없듯이…

💡 int를 널리 사용하는 기타 이유들

        byte b1 = 1;
        byte b2 = 2;
        short s1 = 1;
        short s2 = 2;

        //  ⚠️ 아래는 모두 불가
//        byte b3 = b1 + b2;
//        short s3 = b1 + b2;
//        short s4 = b1 + s2;
//        short s5 = s1 + s2;
  • 자바 (및 다수 언어들) 에서 기본 자료형으로 지정됨
    • 라이브러리와 API 등에서 사용됨
  • 다른 언어들과 호환 (널리 사용되는 자료형)
  • 연산 속도가 타 자료형보다 빠름
    • 32비트 ( 4바이트 ) : 대부분의 CPU에서 처리하기 적합한 크기

복합 대입 연산자

a += ba = a + b
a -= ba = a - b
a *= ba = a * b
a /= ba = a / b
a %= ba = a % b

단항 연산자

연산자반환값부수효과
+값 그대로없음
-양음 반전없음
x ++값 그대로1 증가
++x1 증가한 값1 증가
x--값 그대로1 감소
--x1 감소한 값1 감소

💡 ++, —가 앞에 붙고 뒤에 붙고의 정확한 차이

  • 해당 문 ( statement : 세미콜론으로 구분되는 명령 ) 에서만 의미를 가짐
    • 즉 다음 문에서는 둘 다 이미 값이 바뀌어 있음

비교연산자

a == ba와 b는 같다
a != ba와 b는 다르다
a > ba가 b 보다 크다
a >= ba가 b보다 크거나 같다
a < ba가 b보다 작다
a <= ba가 b보다 작거나 같다
  • boolean 자료형의 값을 반환 (true 또는 false)
  • = ( 대입 연산자 )와 혼동하지 말 것

실수형 자료들

자료형크기
float4바이트
double8바이트
  • double : float 보다 단순히 범위가 넓은 것이 아니라, 보다 정밀하게 표현 가능
		//  float의 최대값과 최소값
        float fMin = -Float.MAX_VALUE;
        float fMax = Float.MAX_VALUE;

        //  double의 최대값과 최소값
        double dMin = -Double.MAX_VALUE;
        double dMax = Double.MAX_VALUE;

        //  최소 절대값
        float fAbsMin = Float.MIN_VALUE;
        double dAbsMin = Double.MIN_VALUE;

		// ⭐ double이 범위도 넓고, 정밀도도 높음 확인
        boolean bool1 = Float.MAX_VALUE < Double.MAX_VALUE;
        boolean bool2 = Float.MIN_VALUE > Double.MIN_VALUE; 
		//  float은 뒤에 f 또는 F를 붙여 표현
        float flt1 = 3.14f;
        double dbl1 = 3.14;

        //  ⚠️ float에는 double을 담을 수 없음
        float flt2 = dbl1;
				//  반대는 가능
        double dbl2 = flt1;
		long lng1 = 123;

        //  정수를 대입할 시 묵시적 변환
        //  💡 float(4바이트)에도 long(8바이트)의 값 담을 수 있음
        float flt3 = lng1;
        double dbl3 = lng1;

        long lng2 = Long.MAX_VALUE;

        //  ⭐ 큰 수(정확히 표현가능한 한도를 넘어서는)일 경우
        //  가능한 최대 정확도로
        float flt4 = lng2;
        double dbl4 = lng2;
		float flt01 = 4.124f;
        float flt02 = 4.125f;
        double dbl01 = 3.5;

        // float끼리의 연산은 float 반환
        float flt03 = flt01 + flt02;

        //  float과 double의 연산은 double 반환
        float flt04 = flt01 + dbl01; // ⚠️ 불가

        //  부동소수점 방식상 오차 자주 있음
        double dbl02 = 0.2 + 0.3f;
        double dbl03 = 0.2f * 0.7f;
        double dbl04 = 0.4 - 0.3;
        double dbl05 = 0.9f / 0.3;
        double dbl06 = 0.9 % 0.6;

        //  소수부가 2의 거듭제곱인 숫자간 연산은 오차 없음
        double dbl07 = 0.25 * 0.5f;
        double dbl08 = 0.5 + 0.25 + 0.125 + 0.0625;
        double dbl09 = 0.0625f / 0.125;
  • ⭐️ 부동소수점 오차 해결을 위해서는 이후 배울 BigDecimal 클래스 사용
		int int1 = 5;
        float flt1 = 2f;
        double dbl1 = 3;
        double dbl2 = 7;

        //  💡 정수 자료형과 실수 자료형의 계산은 실수 반환
        int flt2 = int1 / flt1; // ⚠️ 불가
        double dbl3 = int1 / dbl1;
        double dbl4 = dbl2 / int1;

        //  💡 리터럴로 작성시 double임을 명시하려면 .0을 붙여줄 것
        double dbl5 = 5 / 2;
        double dbl6 = 5.0 / 2;
		double dbl7 = (double) 5 / 2;

비교 연산자

		int int1 = 5;
        float flt1 = 5f;
        double dbl1 = 5.0;
        double dbl2 = 7.89;

        //  💡 정수/실수간, 다른 숫자 자료형간 사용 가능
		boolean bool0 = 123 == 123F;

        boolean bool1 = int1 == flt1;
        boolean bool2 = flt1 == dbl1;
        boolean bool3 = int1 == dbl2;

        boolean bool4 = int1 > dbl2;
        boolean bool5 = flt1 >= dbl2;
        boolean bool6 = dbl1 < dbl2;

회고...

내가 멍청 했던 이유가 있었다... 젤 쉬운 부분을 쉽다고 그저 그냥 그렇게 넘겼던것이다...
젤 쉬운게 아닌 젤 기본되는 것인데 연산자부터 뭔가 새로 배우는 느낌이 들다니....멍청하고 안일했다...
다시금 생각되며 내일부턴 복습이다...!!!!
어디까지? 당연히 제어문과 메소드까지!!!!!

그리고 까먹지 말자

git add.
git commit -m
git push origin ""
profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글